今天看啥
热点:

全面学习Java泛型


1. 先容
2.界说简朴Java泛型
实在Java的泛型便是创建一个用范例作为参数的类。就象我们写类的要领一样,要领是如许的method(String str1,String str2 ),要领中参数str1、str2的值是可变的。而泛型也是一样的,如许写class Java_Generics,这里边的K和V就象要领中的参数str1和str2,也是可变。下面看看例子:
import java.util.Hashtable;
class TestGen0{
  public Hashtable h=new Hashtable();
  public void put(K k, V v) {
   h.put(k,v);
  }
  public V get(K k) {
   return h.get(k);
  }
  public static void main(String args[]){
   TestGen0 t=new TestGen0();
   t.put("key", "value");
   String s=t.get("key");
   System.out.println(s);
  }
}
准确输出:value
这只是个例子,不外看看是不是创建一个用范例作为参数的类,参数是K,V,传入的“值”是String范例。这个类他没有特定的待处置处罚型别,以 前我们界说好了一个类,在输入参数有所牢固,是什么型另外有要求,但是如今编写步伐,完全可以不订定参数的范例,详细用的时间来确定,增长了步伐的通用 性,像是一个模板。
3. 泛型通配符
起首,下面是一个例子,作用是打印出一个聚集中的全部元素,我们起首用老版本jdk1.4的编码规矩,代码如下:
void printColleciton(Collection c){
iterator i = c.iterator();
for (k = 0; k < c.size();k++){
System.out.pritnln(i.next();
}
然后,我们用jdk5.0泛型来重写上面这段代码(循环的语法是新版本的语法):
void printCollection(Colleciton< > c){
for( e : c){
System.out.print(e);
}
}
这个新版本并不比老版本的很多几多少,老版本可以用恣意一种聚集范例作为参数来挪用,而新版本仅仅持有Collection< >范例,Colleciton< >并不是恣意范例的Collection的超类。
那么什么是全部Colleciton范例的超范例呢?它是Collection如许一个范例,读作“未知Colleciton”。它的意思是说Colleciton的元素范例可以范例,我们把它称作通配符范例,我们如许写:
void printCollection(Collecitonc){
for ( e: c){
System.out.println(e);
}
}
如今我们用恣意范例的聚集来挪用它了,必要细致的是内部要领printColleciton(),我们任可以从c中来读出元素,并且这些元素是 范例,并且是宁静的,由于无论聚集中是什么范例,它总包罗 ,但是将恣意工具加到聚集中是不宁静的:
Collecitonc = new ArrayList();
c.add(new ());//编译时错误
由于我们不知道c持有的是什么范例的元素,我们不克不及加 到聚集中去。add()要领用范例E作为参数,(聚集的元素范例)认真正的参 数范例是?的时间,它代表的是一些未知范例。任何通报给add()要领的参数必须是这个未知范例的子范例。由于我们不知道未知范例,以是我们通报给它任何 工具。重要的破例是null,它是每一个范例的成员。
另一方面,假定给一个List,我们挪用get()并且充实使用效果。效果范例是未知范例。但是我总是知道它是一个 ,因此分派一个从get()取出来的效果到一个 的变量是宁静的,大概作为一个参数通报到一个必要 范例的地方。

www.bkjia.comtruehttp://www.bkjia.com/Javabc/991919.htmlTechArticle全面学习Java泛型 1. 先容 2.界说简朴Java泛型 实在Java的泛型便是创建一个用范例作为参数的类。就象我们写类的要领一样,要领是如许的m...

相关文章

帮客评论

视觉看点