为什么不允许通过 .class 返回的类引用来调用静态方法?但是,如果使用类名直接调用静态方法,它可以正常工作。如下例所示。他们不平等吗?
package typeinfo;
class Base {
public static void method1() {
System.out.println("Inside static method1");
}
public void method2() {
System.out.println("Inside method2");
}
}
public class Sample {
public static void main(String[] args) {
Class<Base> b = Base.class;
// Works fine
Base.method1();
// Gives compilation error: cannot find symbol
// Is below statement not equal to Base.method1() ?
b.method1();
}
}
答案 0 :(得分:5)
.class
返回类java.lang.Class
的实例 - 不,Class<Base>
与Base
不同。
类java.lang.Class
主要在您使用Reflection API。
答案 1 :(得分:3)
b
属于Class
类型,因此它具有Class类型的方法,而不是Base
类的方法。
您可以使用Class
的实例来通过反射来调用它们引用的类的方法。
答案 2 :(得分:1)
Base
是名。 Base.method()
是用于在类Base
上调用静态方法的java语法。
Base.class
是对Class
类型对象的引用,描述了类Base
。 Base.class.method1()
当然不起作用,因为类Class
没有方法method1
。
如果必须,可以使用反射来调用基础类的方法。考虑:
Base.class.getMethod("method1").invoke(null);