Class A{
public void test(){
B b = new B();
System.out.println( "Class Name: " + b.createClassC().getClass() );
}
}
Class B{
public C createClassC(){
C c = new C(){
@Override
public boolean equals( Object other ){
return true;
}
};
}
}
Class C{
int val = 8;
}
输出: 类名:package.name.here.B
有人可以告诉我为什么匿名类类型在 getClass() 方法中给出封闭类吗?这会导致对象 C 上的 .equals() 始终失败。我的理解是,由于 getClass 给出了封闭的类名,因此重写的 equals 永远不会被调用?
最佳答案
输出是类名:class nz.test.anon.B$1
美元符号很重要。 B$1 表示 B 下的第一个匿名类。B$2 是第二个,依此类推。
equals 方法也被调用
System.out.println( "This is true: " + b.createClassC().equals(b) );
System.out.println( "and so is this: " + b.createClassC().equals(this) );
关于java - Java 匿名类的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18264422/