我们可以在java中通过temp变量调用静态方法吗

g9icjywg  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(376)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

三天前关门了。
改进这个问题
我们可以通过临时变量调用静态方法吗?
有一个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中有一种引用函数的方法。那么,还有其他更具元功能的类来引用一个literal类吗?

cu6pst1q

cu6pst1q1#

我们可以通过临时变量调用静态方法吗?
是的,你可以(模块化编译错误!)
但你可能没有做你认为你在做的事情。这是个坏主意。
事实上, aa.test() 其实和写作的意思完全一样 Variable.test() . 也就是说,价值 aa 在确定调用哪个方法和调用method1时,将完全忽略它的实际类型。
谁的班级 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”。

xuo3flqw

xuo3flqw2#

实际上,这不是如何从类中调用静态方法。
如果我们有aa级:

class AA {
    public AA() {} 

    public static void test() {
        System.out.println("Test");
    }
}

我们可以这样称呼测试方法:

AA.test();

不建议像这样从其示例调用静态方法:

AA aa = new AA();
aa.test();

相关问题