我正在使用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/

10-12 03:52