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?
答案 0 :(得分:1)
输出为Class Name: 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) );
答案 1 :(得分:0)
不知道你是如何运行代码的。需要注意的一些要点如下 -
public static void main(String args[])
方法。
其次,请参阅您的方法
public C createClassC(){
C c = new C(){
@覆盖
public boolean equals(Object other){
返回true;
}
};
}
函数签名表明它应该返回C类(或它的子类)的对象,但是我没有看到这样的return语句。您必须return c;
最后,您的代码输出为Class Name: class nz.test.anon.B$1
,其中B $ 1表示匿名类。