当前位置: 代码迷 >> 综合 >> Listlt;Tgt;,List,Listlt;Objectgt; 区别 转自《Easy Coding》
  详细解决方案

Listlt;Tgt;,List,Listlt;Objectgt; 区别 转自《Easy Coding》

热度:34   发布时间:2023-12-14 05:02:51.0
package chapter6;import java.util.ArrayList;
import java.util.List;public class ListNoGeneric {@SuppressWarnings("unchecked")public static void main(String[] args) {// 段落一List a1 = new ArrayList();a1.add(new Object());a1.add(new Integer(1));a1.add(new String("a1"));// 如果将 a1 改变成List<Object> 那么段落三会编译异常// List<Object> a1 = new ArrayList();// a1.add(new Object());// a1.add(new Integer(1));// a1.add(new String("a1"));// 段落二 完美运行List<Object> a2 = a1;a2.add(new Object());a2.add(new Integer(2));a2.add(new String("a2"));// 段落三List<Integer> a3 = a1;a3.add(3);// 编译异常 因为添加了泛型约束,所以添加Intger以外的类型数据会异常// a3.add(new Object());// a3.add(new String("a2"));// 段落四 /* 可以擦除与删除不能使用add(Object o) 方法添加可以用list.add(0, null) 添加数据(只能为添加null)可以用list.addAll(a1) 来添加一个list。*/// List<?> a4 = a1;// a1.remove(0);// a4.clear();// a4.add(new String("aaaaaaaaaaaaa"));//引用类型不解释// System.out.println(a1.size());}
}
  • List<T> 定义了数据类型约束,可以进行取值赋值操作,取值的时候用传入的数据类型接受就可以了。
  • List<?> 没有明确的定义数据类型,不可以写入值,只能进行取值、clear、remove操作,取出后全部强转为Object类型。一般用来作为参数接受外部的集合,或者返回一个不知道具体类型元素的集合。
  • List<Object> List 两个用起来没啥子差别,但是在将自己赋值给另一个的时候就要注意了。例如:
    List l1 = new ArrayList();
    l1.add("我欲乘风破浪");
    //在运行的时候才会抛出异常
    //java.lang.String cannot be cast to java.lang.Integer
    List<Integer> l2 = l1;List<Object> l3 = new ArrayList();
    l1.add("我欲乘风破浪");
    // 在编译的时候就会抛出异常
    List<Integer> l4 = l3;

    大概就是这样,有什么问题欢迎补充。

  相关解决方案