首页 > 解决方案 > 我们可以通过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 中有一种方法可以引用函数。那么是否还有其他更多的元功能来引用文字类?

标签: javastatic-methods

解决方案


我们可以通过临时变量调用静态方法吗?

是的你可以。(以编译错误为模!)

但是你可能没有做你认为你正在做的事情。这是一个坏主意

事实上,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”。


推荐阅读