首页 > 解决方案 > Java Class2.getClass() 返回错误的类

问题描述

Class1.java

public class Class1 {

    public static void main(String[] args) {
        System.out.println(new Class2() {}.getClass());
    }

}

Class2.java

public Class2 {
}

当我尝试获取班级时,Class2它会返回班级Class1。上述代码的输出返回class Class1$1。我希望它应该返回class Class2$1。为什么它返回一个完全不同的类?

标签: java

解决方案


你实际上有一个匿名子类Class2. 这个

System.out.println(new Class2() {}.getClass());

应该

System.out.println(new Class2().getClass());

而且,正如评论中所指出的,编译器分配给匿名类的名称是一个不应该回复的实现细节。例如,这里

System.out.println(new Class1() {}.getClass());
System.out.println(new Class2() {}.getClass());
System.out.println(new Class2() {}.getClass());

在每种情况下,您都会得到不同的数字。


推荐阅读