根据此报价表http://www.onjava.com/pub/a/onjava/excerpt/javagenerics_chap05/index.html?page=2
每个参数化类型都是相应原始类型的子类型,因此可以在需要原始类型的地方传递参数化类型的值。通常,在期望其子类型的值的地方传递超类型的值是错误的,但是 Java 确实允许在期望参数化类型的地方传递原始类型的值——但是, 它通过生成来标记这种情况未经检查的转换警告。例如,您可以将 type 的值分配给 type
Stack<E>
的变量Stack
,因为前者是后者的子类型。您还可以将 Stack 类型的值分配给 类型的变量Stack<E>
,但这会生成未经检查的转换警告。
此代码必须为真
public class Trial
{
static void t(Stack<Integer> a )
{
}
public static void main( String[] args )
{
t( new s());
}
}
class s{
}
class Stack< T > extends s {
}
这是t(new s());处的错误; 我在问为什么给我错误,而不是如何解决问题!