通常,在期望其子类型的值的地方传递超类型的值是错误的。
编辑:举个例子(虽然它很奇怪)
interface Testing{
void printValue(TestClient cl);
}
class TestClient implements Testing{
private String content;
public TestClient(String content){
this.content = content;
}
@Override
public void printValue(TestClient cl) {
// TODO Auto-generated method stub
System.out.println((cl.content!=null ?cl.content :"Hello World"));
}
}
public class Test{
public static void main(String args[]) {
Testing t = new TestClient("Hi Friends");
Testing t1 = new TestClient("Hi Enemies");
t1.printValue(t); // generates error (The method printValue(TestClient) in the type Testing is not applicable for the arguments (Testing)
}
}
在这里,t1.printValue(t)
方法产生错误The method printValue(TestClient) in the type Testing is not applicable for the arguments (Testing)
但是在泛型中,每个参数化类型都是相应原始类型的子类型,因此可以将参数化类型的值传递到期望原始类型的地方。
那么,为什么 Java 允许在需要参数化类型的地方传递原始类型的值——但是,它通过生成未经检查的转换警告来标记这种情况。