泛型的初步认识

JDK 1.5中引入了泛型的概念。
泛型在编程中的好处:
1 可以在编译时检查存储的数据是否正确。软件开发有一个趋势就是尽早的发现错误,最好就是在编译阶段,泛型正好
符合这一条件。
2 减少了强制转换,String str = (String)strList.get(0);这样的操作属于一种向下转型,是比较危险的操作,当List内
存储的对象不适合String时就会抛出异常。

泛型最常见的是被应用在接口、类、方法上。

泛型应用在接口上


public interface ValuePair<A,B>{
   public A getA();
   public B getB();
   public String toString();
}

 

 

 

泛型应用在类上


public class ValuePairImpl<A,B>{
   public final A first;
   public final B second;
   public ValuePairImpl(A a,B b){
     first = a;
     second = b;
   }
   public A getA(){
     return first;
   }
   public B getB(){
     return second;
   }
   public String toString(){
     return "{"+first+","+second+"}";
   }
}


 如果这个类实现泛型接口


 public class ValuePairImpl<A,B> implements ValuePair<A,B>{
  .......
 }

 

 

 

泛型应用在方法上
public class GenericMethod{
   public <T> void printValue(T v){
     String str = v.getClass().getName()+"="+v.toString();
     System.out.println(str);
   }
}

 

 

限制泛型的可用类型
<T extends parentClass>
<T extends parentClass & parentInterface1 & parentInterface2>

 

通配符泛型
List<String> list = new ArrayList<String>();
List<Integer> list = new LinkedList<Integer>();
public void print(List<? extends Number> lst){
  for(int i =0;i<lst.size();i++){
     System.out.println(lst.get(i));
  }    //这个例子中只能放数字格式的
}


--三种形式
 Generic Type<?>
 Generic Type<? extends upperBoundType>
 Generic Type<? super lowerBoundType>

 

 泛型内部采用了类型擦除机制,导致一些特殊情况下的编译失败和只能get不能set的情况
通过一些技巧可以让编译器重构类型信息使得set方法能够被使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值