java,从 A<T> 转换为 A<S extends T>
java, cast from A<T> to A<S extends T>
我想知道下面的代码是如何工作的。我认为它将 A 类型强制转换为 A,这应该不起作用,例如,您不能将 A 大小写为 A。但是调用 A.returnB() 只会导致警告:未经检查或不安全的操作。
class A<T>{
public static <S extends Number> A<S> returnB(){
return (A<S>) B.INSTANCE;
}
}
class B extends A<Number>{
static final B INSTANCE = new B();
}
简而言之,Java 使用类型擦除实现泛型,并允许您回退到原始类型(前泛型)以实现向后兼容性,因此不安全的转换 是 允许。它们带有警告,并可能在运行时导致 ClassCastExceptions,但它们在某些情况下也可以合法使用,因此是允许的。
我想知道下面的代码是如何工作的。我认为它将 A,这应该不起作用,例如,您不能将 A
class A<T>{
public static <S extends Number> A<S> returnB(){
return (A<S>) B.INSTANCE;
}
}
class B extends A<Number>{
static final B INSTANCE = new B();
}
简而言之,Java 使用类型擦除实现泛型,并允许您回退到原始类型(前泛型)以实现向后兼容性,因此不安全的转换 是 允许。它们带有警告,并可能在运行时导致 ClassCastExceptions,但它们在某些情况下也可以合法使用,因此是允许的。