次のコード サンプルで、見苦しい SuppressWarnings 注釈を回避する方法はありますか?
このコードは、パラメーターtが A のインスタンスであるかどうかをテストし、そうである場合は A の別のインスタンスを返します。これはcreateCopy()の一般的な規約を満たし、そのパラメーターと同じ型のオブジェクトを返すため、安全な操作です。同じことがBのテストにも当てはまります。
ワイルドカード キャプチャとヘルパー メソッドについては知っていますが、問題は非常に似ているように見えますが、それがこの状況で役立つかどうか、またどのように役立つかはわかりません。
abstract class Base {
public static <T extends Base> T createCopy(T t) {
if (t instanceof A) {
@SuppressWarnings("unchecked")
T copy = (T) new A((A) t);
return copy;
}
if (t instanceof B) {
@SuppressWarnings("unchecked")
T copy = (T) new B((B) t);
return copy;
}
throw new IllegalStateException();
}
}
class A extends Base {
public A() { }
public A(A a) { }
}
class B extends Base {
public B() { }
public B(B b) { }
}