そのようなコードを実行することの危険性は (一般的な場合)、equals()
メソッドを壊す可能性があることです。これは、次の 2 つの一般的なテンプレートがあるためですequals()
。
public boolean equals(Object ob) {
if (!(ob instanceof MyClass)) return false;
...
}
と
public boolean equals(Object ob) {
if (ob.getClass() != getClass()) return false;
...
}
最初のものは、あなたが話している匿名サブクラスで引き続き機能しますが、2 番目のものは機能しません。つまり、 instanceof は必ずしも可換ではないため、2 番目の方法がベスト プラクティスと見なされます(意味a.equals(b)
は equal ではない可能性がありb.equals(a)
ます)。
ただし、具体的には、この場合、他のオブジェクトがインターフェイスであることを確認するだけArrayList
のメソッドを使用するため、問題ありません。AbstractList.equals()
instanceof
List
しかし、それは知っておくべきことです。
私が提案するのは、少し異なる方法で行うことです。
List<String> list = new ArrayList<String>(
Arrays.asList("hello", "goodbye")
);
確かに冗長ですが、結果として得られるクラスは "pure" であるため、この方法で問題が発生する可能性は低くなりますArrayList
。