我们可以在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();
我知道通过实例调用静态方法也不是一个好方法
我们知道在Java8中有一种引用函数的方法。那么,是否还有更多的元功能来引用文本类呢
# 1 楼答案
是的,你可以。(对编译错误进行模化!)
但是你可能没有做你认为你正在做的事情。这是一个坏主意
事实上,
aa.test()
实际上与写Variable.test()
的意思完全相同。也就是说,在确定调用哪个方法和调用方法1时,aa
的值及其实际类型被完全忽略调用其
test()
方法的类在编译时解析为Variable
。Java不支持重写或动态调度static
方法1-JLS声明对计算引用的表达式进行求值,但随后将丢弃结果引用
通过实例变量调用
static
方法是错误的风格,应该避免考虑如下:
问:输出是什么
答:输出为“AA”
# 2 楼答案
实际上,这不是从类调用静态方法的方式
如果我们有AA级:
我们可以这样调用测试方法:
不建议像这样从其实例调用静态方法: