Java泛型编程快速入门(二)

2014-11-23 21:43:31 · 作者: · 浏览: 22
也许你有时候呢想限定一下K和V当然范围,怎么做呢?看看如下的代码:

//Code list 8
class TestGen2<K extents String,V extends Number>
{
  private V v=null;
  private K k=null;
  public void setV(V v){
   this.v=v;
  }
  public V getV(){
   return this.v;
  }
  public void setK(K k){
   this.k=k;
  }
  public V getK(){
   return this.k;
  }
  public static void main(String[] args)
  {
   TestGen2<String,Integer> t2=new TestGen2<String,Integer>();
   t2.setK(new String("String"));
   t2.setV(new Integer(123));
   System.out.println(t2.getK());
   System.out.println(t2.getV());
  }
}

   上边K的范围是<=String ,V的范围是<=Number,注意是“<=”,对于K可以是String的,V当然也可以是Number,也可以是Integer,Float,Double,Byte等。看看下图也许能直观些请看上图A是上图类中的基类,A1,A2分别是A的子类,A2有2个子类分别是A2_1,A2_2。

   然后我们定义一个受限的泛型类class MyGen<E extends A2>,这个泛型的范围就是上图中兰色部分。

   这个是单一的限制,你也可以对型别多重限制,如下:

class C<T extends Comparable< super T> & Serializable>
   我们来分析以下这句,T extends Comparable这个是对上限的限制,Comparable< super T>这个是下限的限制,Serializable是第2个上限。一个指定的类型参数可以具有一个或多个上限。具有多重限制的类型参数可以用于访问它的每个限制的方法和域。

   2.4. 多态方法

//Code list 9
class TestGen {
  <T extends Object> public static List<T> make(T first) {
   return new List<T>(first);
  }
}