这题谁出的,太没节操了怎么做很容易,首先用反射可以做,不用反射顶着编译器警告也可以做:List list2 = list;
list2.add("abc");

解决方案 »

  1.   

    楼上说的对,java中的泛型是伪泛型
      

  2.   

    ArrayList<Integer> list = new ArrayList<Integer>();
    Method add = ArrayList.class.getDeclaredMethod("add", Object.class);
    add.invoke(list, "csdn");
    System.out.println(list.get(0));
      

  3.   

    居然可以啊,原理是什么呢??Arraylist并没有提供添加object类型的参数啊?
        public boolean add(E e) {}
        public void add(int index, E element) {}
      

  4.   

    居然可以啊,原理是什么呢??Arraylist并没有提供添加object类型的参数啊?
        public boolean add(E e) {}
        public void add(int index, E element) {}

    Java的泛型是伪泛型,基本是在编译器实现的,在生成的字节码中是不包含泛型中的类型信息的。。这种机制好像是叫类型擦除,在这你打印一下就知道了
    Method[] method = ArrayList.class.getMethods();
    for(Method m : method){
    System.out.println(m);
    }
      

  5.   

    居然可以啊,原理是什么呢??Arraylist并没有提供添加object类型的参数啊?
        public boolean add(E e) {}
        public void add(int index, E element) {}

    Java的泛型是伪泛型,基本是在编译器实现的,在生成的字节码中是不包含泛型中的类型信息的。。这种机制好像是叫类型擦除,在这你打印一下就知道了
    Method[] method = ArrayList.class.getMethods();
    for(Method m : method){
    System.out.println(m);
    }
    涨知识了
      

  6.   

    http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/5.gif
      

  7.   

    String str;
    ...
    list.add(Integer.parseInt(str));
      

  8.   

    居然可以啊,原理是什么呢??Arraylist并没有提供添加object类型的参数啊?
        public boolean add(E e) {}
        public void add(int index, E element) {}

    Java的泛型是伪泛型,基本是在编译器实现的,在生成的字节码中是不包含泛型中的类型信息的。。这种机制好像是叫类型擦除,在这你打印一下就知道了
    Method[] method = ArrayList.class.getMethods();
    for(Method m : method){
    System.out.println(m);
    }
    NB长见识了
      

  9.   

    不知道有啥意思 为啥不直接NEW ArrayList<String> list = new ArrayList<String>(); 求深意?
      

  10.   

    list.getClass().getMethod("add", Object.class).invoke(collection2,"xxxx");
    这个是破坏泛型,出题的老师脑子被门夹过了,他是要放弃人家辛苦搞出来的泛型,回家玩数组啊。
      

  11.   

    真nb,这样都可以,都是人才啊。但是.getClass()后会报错,求解?ArrayList<Integer> list = new ArrayList<Integer>();
    Method add = ArrayList.class.getDeclaredMethod("add", Object.class);
    add.invoke(list, "csdn");
    List list2 = list;
    list2.add("abc");
    System.out.println(list); // [csdn, abc]
    System.out.println(list.get(0).getClass()); // java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
      

  12.   

    居然可以啊,原理是什么呢??Arraylist并没有提供添加object类型的参数啊?
        public boolean add(E e) {}
        public void add(int index, E element) {}

    Java的泛型是伪泛型,基本是在编译器实现的,在生成的字节码中是不包含泛型中的类型信息的。。这种机制好像是叫类型擦除,在这你打印一下就知道了
    Method[] method = ArrayList.class.getMethods();
    for(Method m : method){
    System.out.println(m);
    }
    涨姿势了
      

  13.   

    个人感觉add添加的实际上还是Object,泛型作用只是对添加的内容进行了形式限制