想知道如何使用 Java 泛型正确进行条件转换。
我的示例中的第一个
castTo
方法似乎是最明显的,但它给了我一个编译时错误 A cannot be casted to T
,我知道这是因为 Java 类型擦除功能。
我想出了
castTo
的第二个版本,我需要通过一个课程并使用 isInstance()
,它可以工作,但看起来很难看。
有没有更好的方法?我讨厌每次都传递类参数,而第二种方法对我来说看起来不像现代的 java 21 方法。
class A {
int value = 1;
}
class B extends A {
A getObject() {
return new B();
}
<T extends A> T castTo(A obj) {
// Compile error: A cannot be casted to T
if (obj instanceof T casted) {
return casted;
}
return null;
}
<T extends A> T castTo(A obj, Class<T> targetType) {
if (targetType.isInstance(obj)) {
return targetType.cast(obj);
}
return null;
}
}
有没有更好的办法?
不。您必须显式传递
Class
参数。