List<T>,List,List<Object> 区别 转自《Easy Coding》

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;

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值