Java5.0新特性06-泛型(Generic)

泛型generic

1.泛型的优点:

         增加可读性和稳定性

      

未使用泛型: List myIntList = new ArrayList();// 1

       myIntList.add(new Integer(0));// 2

       Integer x = (Integer)myIntList.iterator().next();// 3

使用泛型: (不需转换动作;编译器会在编译时检查类型)

List<Integer> myIntList = new ArrayList<Integer>(); // 1

      myIntList.add(new Integer(0)); // 2

       Integer x =myIntList.iterator().next(); // 3

 

2.在类中使用泛型以及定义泛型方法:

 

publicclass GenericDemo {

    publicstaticvoid main(String[] args) {

 

       //1.泛型的使用,泛型类定义

       Person<String> p = new Person<String>("god");

       System.out.println(p.getName());

      

       //2.静态方法的泛型定义

       Person.fun(new Integer(3));

      

    }

}

 

class Person <T> {

    private Tname;

   

    public Person(T name){

       this.name = name;

    }

   

    public T getName() {

       returnthis.name;

    }

   

    publicstatic <E>void fun(E e) {

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

    }

}

      

3.泛型的继承:

    a.

       Object[] obj =new Object[9];

       Integer[] in = new Integer[9];

       obj = in; //可以

      

       Set <Object> objSet = new HashSet<Object>();

       Set <Integer> inSet = new HashSet<Integer>();

       objSet = inSet; //不可以的,出错

    b.

       Set <Object> objSet =new HashSet<Object>();

       Set <Integer> inSet = new HashSet<Integer>();

       //objSet = inSet; //不可以的,出错

      

       p.fun2(objSet); //可以

       p.fun2(inSet); //可以

 

       publicvoid fun2(Set <?extends Object> set) {

           System.out.println(set);

        }  

 

4. 泛型函数允许类型参数被用来表示方法的一个或多个参数之间的依赖关系,或者参数与其返回值的依赖关系。如果没有这样的依赖关系,不应该使用泛型方法

 

Add:

泛型上限:<? extends Fruit>泛型下限<? super Fruit>:

       List<? extends Fruit>所应该持有的对象是Fruit的子类,而且具体是哪一个子类还是个未知数,所以加入任何Fruit的子类都会有问题,因为如果add Apple的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan>()Apple的加入肯定是不行的,如果 如果add Jonathan   的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan的子类>()Jonathan的加入又不合法,所以List<? extends Fruit> list 不能进行add      

      而List<? super Fruit> list 表示list持有的对象是Fruit的父类,下限是  Fruit,所以list中add Fruit或Fruit的子类是没有问题的 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值