执行此类代码(在一般情况下)的危险在于您可能会破坏equals()
方法。那是因为有两个通用模板equals()
:
public boolean equals(Object ob) {
if (!(ob instanceof MyClass)) return false;
...
}
和
public boolean equals(Object ob) {
if (ob.getClass() != getClass()) return false;
...
}
第一个仍然适用于您正在谈论的匿名子类,但第二个不会。事实是,第二个被认为是最佳实践,因为 instanceof 不一定是可交换的(意思a.equals(b)
可能不等于b.equals(a)
)。
但是,在这种情况下,特别是ArrayList
使用AbstractList.equals()
仅检查另一个对象是否为instanceof
interface的方法List
,所以你很好。
然而,这是需要注意的。
我的建议是稍微不同:
List<String> list = new ArrayList<String>(
Arrays.asList("hello", "goodbye")
);
当然它更罗嗦,但你不太可能以这种方式遇到麻烦,因为结果类是“纯”的ArrayList
。