java泛型基本介绍

一、为什么有java泛型?

        在使用泛型前,存入集合中的元素可以是任何类型的,当从集合中取出时,所有的元素都是Object类型,需要进行向下的强制类型转换,转换到特定的类型,而转换的时候可能发生Exception。

        泛型的出现使得程序员自己可以指定类型,这样集合就只能容纳该类型的元素。从而避免类型转换时候的异常。

泛型使用

二、集合中使用:

如下代码,我们可以把泛型当做一个特殊的类,其中的E用其他的Class代替:

        List<E>lists = new ArrayList<E>();

未使用泛型之前:

        List lists1= newArrayList ();

对于上边的list1,我们可以插入所有类型的对象。

使用泛型之后:

        List<String>list2 = new ArrayList<String>();

对于上边的list2,我们只能插入String类型的对象。

三、定义泛型方法:

public <E>E test(E e){

             System.out.println(e.getClass());

             return e;

      }

测试一下上面的方法:

public staticvoid main(String[] args) {

             String count = "123";

             TestGenericstestGenerics = new TestGenerics();

             System.out.println(testGenerics.test(count));

      }

结果:

        class java.lang.String

        123

四、在泛型中还有一种叫通配符(?)如下代码:

        Collection<?> c=new ArrayList<String>(); 

        c.add(newObject()); //compile time error,不管加入什么对象都出错,除了null外。 

        c.add(null); //OK

因为?是未知类型,你不确定向c中加入的到底是什么类型,所以什么类型都不能插入,除了null以外。

五、边界通配符(? extends Collection和? super ArrayList)

? extends Collection,指的是Collection的任意子类,例子:

        List<? extends Object> list1 = new ArrayList<String>();

上述代码,你可以确定list1的数据类型是一个Object的子类,但不确定是哪个子类,所以就会出现,你不能向list1中添加任何对象,但是你可以从里面取对象,用Object来接收。

? super ArrayList,指的是Collection的任意父类,例子:

        List<? super String> list2 = new ArrayList<String>();

这边list2跟上述的list1的情况正好相反。

六、泛型注意项:

        ①  假设A是B的子类,那么List<A>和List<B>就不是继承关系了。

        ②  从一个数据类型里获取数据,使用 ? extends 通配符,把对象写入一个数据结构里,使用 ? super 通配符,既想存,又想取,那就别用通配符。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值