Java中的.class返回什么?

3
为什么不允许通过.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个回答

5

.class 返回一个类的实例 java.lang.Class - 但是,Class<Base> 并不等同于 Base

java.lang.Class 主要用于使用Reflection API时。


谢谢回复。但是为什么 Class<Base> 不等于 Base? - niting112
1
它们是不同类型的名称 - 类型java.lang.Class和类型typeinfo.Base。正如Eran所说,类型为Class<Base>的对象具有Class类的方法,而不是Base类的方法,因此您无法在类型为Class的对象上调用Base类的方法。 - Jesper

3

bClass 类型,因此它具有 Class 类型的方法,而不是你的 Base 类的方法。

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


1

Base是类名。 Base.method()是Java语法,用于调用类Base上的静态方法。

Base.class是指向类型为Class的对象的引用,描述类Base。当然,Base.class.method1()不起作用,因为类Class没有一个名为method1的方法。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接