В следующем примере кода есть ли способ избежать уродливых аннотаций SuppressWarnings?Java generics: захватить общий тип при копировании экземпляров подклассов
Кодовые испытания, если параметр т является экземпляром A и возвращает другой экземпляр А если да. Это удовлетворяет общему договору createCopy(), чтобы вернуть объект того же типа, что и его параметр, поэтому это безопасная операция. То же самое касается теста для B.
Я знаю о Wildcard Capture and Helper Methods, но я не уверен, что и как это помогает в этой ситуации, хотя проблема, похоже, очень похожа.
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) { }
}
Если вы считаете аннотации «уродливыми», просто удалите их. они являются необязательными. –
Затем я получаю предупреждение о безопасности типа. Я хочу знать, есть ли способ избежать этого предупреждения, поскольку код _is_ type-safe. Если бы я мог сообщить компилятору. – devconsole
, которую вы предоставили компилятору, используя аннотацию. –