Java中.class究竟返回了什么?

时间:2014-12-25 13:58:04

标签: java class

为什么不允许通过 .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();
    }
}

3 个答案:

答案 0 :(得分:5)

.class返回类java.lang.Class的实例 - 不,Class<Base>Base不同。

java.lang.Class主要在您使用Reflection API

时使用

答案 1 :(得分:3)

b属于Class类型,因此它具有Class类型的方法,而不是Base类的方法。

您可以使用Class的实例来通过反射来调用它们引用的类的方法。

答案 2 :(得分:1)

BaseBase.method()是用于在类Base上调用静态方法的java语法。

Base.class是对Class类型对象的引用,描述了类BaseBase.class.method1()当然不起作用,因为类Class没有方法method1

如果必须,可以使用反射来调用基础类的方法。考虑:

Base.class.getMethod("method1").invoke(null);