java_泛型

一.   泛型類的使用

  1.定義類時使用泛型

  class 類名<字母列表>{    ……      }   泛型常見字母:T, K,V ,E ?   不能使用在靜態屬性.靜態方法上

 

 

  2.注意:

  1.泛型使用時不能指定基本類型   2.使用時指定類型(引用類型,不能使用基本數據類型)   3. 不能使用在靜態屬性.靜態方法上,靜態屬性在編譯時肯定(即不能把字母用在靜態屬性上)   4.編譯時自動檢查泛型   5.接口中泛型只能用在方法中,不能用在全局常量 (接口只是由全局常量和抽象方法組成)

 

   3.代碼示例

    
public class Student<T1,T2> { private T1 name; private T2 age; public Student(T1 name, T2 age) { super(); this.name = name; this.age = age; } public T1 getName() { return name; } public void setName(T1 name) { this.name = name; } public T2 getAge() { return age; } public void setAge(T2 age) { this.age = age; } public static void main(String[] args) { Student<String,Integer> stu=new Student<String,Integer>("章三",20); System.out.println(stu.getName()+stu.getAge()); } }
示例代碼

 

 

二.   泛型方法

  定義:

    修飾符<字母> 返回類型 方法名(字母){}java

  注意:

  1.泛型方法在返回類型前面定義,   2.在使用時肯定對象類型   3.泛型元素只能訪問對象的信息,不能修改,由於不肯定對象類型

 

   示例代碼: 

  
import java.io.Closeable; import java.io.IOException; public class TestMethod { //測試泛型方法

   public static void main(String[] args) { test1("abc"); } //test1

   public static <T> void test1(T t){ System.out.println(t); } //test2 extends等價於<=

   public static <T extends Closeable> void test2(T... t){ for(T e:t){ try { e.close(); } catch (IOException e1) { // TODO Auto-generated catch block
 e1.printStackTrace(); } } } }
示例代碼

 

 

三.   泛型擦除

  定義

  1.父類爲泛型類,子類能夠爲泛型類,也能夠不是泛型類,不是泛型類須要指定子類,子類泛型表明字母和父類要相同
  
2.子類爲泛型類,父類不指定類型,稱爲泛型的擦除.使用object替換
  
3.泛型擦除,要麼同時擦除,要麼擦除父類,子類的類型大於等於父類,僅僅擦除子類是錯誤的.
  
4.屬性類型(根據位置而定):       父類中:隨父類而定,       子類中:隨子類而定     方法重寫:       隨父類而定   5.泛型接口與繼承是同樣的   6.擦除後,不會進行類型檢查

 

  示例代碼:

  
//父類爲泛型類

public abstract class Father<T> { T name; abstract <T> void test(T t); } //子類不指定類型

class son<T> extends Father<T>{ T t2;//本身定義的變量
 @Override <T> void test(T t) { // TODO Auto-generated method stub
 } } //父類爲泛型類,子類指定類型

class son1 extends Father<String>{ @Override <T> void test(T t) { // TODO Auto-generated method stub
 } } //子類爲泛型類,父類不指定類型,稱爲泛型的擦除

class son2<T> extends Father{ @Override void test(Object t) { // TODO Auto-generated method stub
 } } //子類父類同時擦除

class son3 extends Father{ @Override void test(Object t) { // TODO Auto-generated method stub
 } } /*//錯誤:子類擦除,父類沒有擦除 class son4 extends Father<T>{ @Override <T> void test(T t) { // TODO Auto-generated method stub } }*/
示例代碼

 

四.注意事項

  

沒有泛型數組(泛型數組不固定長度,沒法開闢空間,泛型數組能夠聲明,不能夠建立,不用)數組

 

泛型不能多態ide

 

返鄉客已嵌套,就是複雜一點,並不難測試

 

泛型數組能夠聲明,不能夠建立this

 

聲明與定義中泛型只寫一次便可spa

相關文章
相關標籤/搜索