foo
方法在下面的例子中给我们一个警告,而bar
不是?Java泛型继承警告
public class X {
static class Y {}
static class Z extends Y {}
Y y = new Y();
<T extends Y> T foo() {
return (T) y; // warning - Unchecked cast from X.Y to T
}
Z bar() {
return (Z) y; // compiles fine
}
}
您对类型删除有多少了解?见http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#Type擦除 –
我认为很明显,'foo()'应该给出警告。您正在将对象'y'投射到'Y'的某个未知超类'T'。我也很感兴趣,为什么'bar()'不。我猜编译器能够看到''Y'到'Z'不会导致问题,因为'Z'的定义是可用的。 – SebastianH
@SebastianH:我不认为这是一个问题。 – gudge