java - 我们可以通过java中的临时变量调用静态方法吗
问题描述
我们可以通过临时变量调用静态方法吗?
有AA级
class AA {
static void test() {
}
}
class Main {
public static void main(String[] args) {
var aa = AA;
aa.test(); // Can we call static method via a temp vairble ?
}
}
为什么我有这个问题?因为我必须在重构工作中将所有实例调用样式修改为类静态样式。该方法之前是一个实例方法并使用局部变量来调用它,现在它变成了一个静态方法或类。所以我考虑是否有办法只修改变量。也许是天真。
直接,也许是这样,但不对。
Class<AA> aa = AA;
aa.test();
我知道通过实例调用静态方法也不是好方法。
我们知道在 Java 8 中有一种方法可以引用函数。那么是否还有其他更多的元功能来引用文字类?
解决方案
我们可以通过临时变量调用静态方法吗?
是的你可以。(以编译错误为模!)
但是你可能没有做你认为你正在做的事情。这是一个坏主意。
事实上,aa.test()
实际上和写作的意思完全一样Variable.test()
。也就是说,在确定调用哪个方法以及调用方法1时,完全忽略aa
了 的值及其实际类型。
调用其test()
方法的类Variable
在编译时解析为。Java 不支持static
方法的覆盖或动态分派。
1 - JLS 声明计算引用的表达式已计算,但结果引用随后被丢弃。
static
通过实例变量调用方法是不好的风格,应该避免。
考虑一下:
class AA {
static void test() {
System.out.println("AA");
}
}
class BB extends AA {
static void test() {
System.out.println("BB");
}
}
class Main {
public static void main(String[] args) {
AA aa = new BB();
aa.test();
}
}
问:输出是什么?
A:输出为“AA”。
推荐阅读
- regex - 使用正则表达式为表情符号添加特殊字符中的空格
- java - 我不明白为什么它会为快速排序程序提供数组越界异常?
- java - 如何使用 Spring Java 应用程序使 IBM MQ 侦听器进程缓慢
- c++ - 我正在尝试将浮点数四舍五入到小数点后两位,但这是不正确的。如何在 C++ 中修复此舍入错误?
- c# - 如何从程序向 SqlServer 和 MySql 发送查询?
- python - 我们如何获取长整数的用户输入?
- angular - 从 Angular 客户端将文件上传到 Amazon S3?
- arrays - Swift Collection <__NSCFSet: 0x161174110> 在枚举时发生了变异
- excel - 用另一个矩形的图像填充替换矩形图像填充
- java - 在哪个领域使用 OSGI 有意义?