在下面的代码示例中,有没有办法避免丑陋的 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) { }
}