我正在使用jdk 1.6
我的主要方法:
exmp3<String , Integer> exmp3 = new exmp3( "ravi" , new ArrayList<String>());
exmp3.put(5);
exmp3.put(15);
exmp3.put(20);
ArrayList<Integer> a = exmp3.getObject();
System.out.println(a.size());
类exmp3:
public class exmp3<ABC , XYZ>
{
private ABC abc ;
private ArrayList<XYZ> xyz;
public exmp3(ABC abc , ArrayList<XYZ> xyz)
{
this.xyz = xyz;
}
public void put(int i)
{
ArrayList<Integer> a = (ArrayList<Integer>) this.xyz;
a.add(i);
}
public ArrayList<XYZ> getObject()
{
return xyz;
}
}
我的查询是在
exmp3
方法中创建main
的实例时,为什么String
被接受为ArrayList
的参数类型,正如我在exmp3<String , Integer> exmp3
方法中提到的main
一样。 最佳答案
因为您使用的是:
new exmp3( "ravi" , new ArrayList<String>());
这几乎与
new exmp3<Object,Object>( "ravi" , new ArrayList<String>());
在实例化时,方法或构造函数中的参数从不定义类型。编译器只会看到(如果您不考虑擦除):
new exmp3( String , ArrayList);
当您的实例声明使用此定义时:
public class exmp3<Object, Object>
{
private Object abc ;
private ArrayList<Object> xyz;
public exmp3(Object abc , ArrayList<Object> xyz)
{
this.xyz = xyz;
}
public void put(int i)
{
ArrayList<Integer> a = (ArrayList<Integer>) this.xyz;
a.add(i);
}
public ArrayList<Object> getObject()
{
return xyz;
}
}
关于java - Java泛型魔术,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11014646/