2014年4月17日 星期四

Generics : 單個泛型類型

定義類別 class 時,當幾個類別的邏輯其實都相同,但只有涉及的資料型態不同時,則以泛型來定義類別(Generics Class)。

泛型類別本身就是資料形態,可用來宣告物件。

使用時要注意轉換型態或介面 type casting,否則在執行時 run time 會發生 ClassCastException。

class GenericNumber <T>{
 private T number;
 
 public void setNumber(T number){
  this.number = number;
 }
 
 public T getNumber(){
  return number;
 }
}

public class GenericsUndefined {

 public static void main(String[] args) {
  GenericNumber <Integer> i = new GenericNumber <Integer>();
  i.setNumber(10);
  System.out.println("Integer value : " + i.getNumber());
  
  GenericNumber <Boolean> f = new GenericNumber <Boolean> ();
  f.setNumber(true);
  System.out.println("Boolean value : " + f.getNumber());
  
  GenericNumber <Double> d = new GenericNumber <Double> ();
  d.setNumber(10.5);
  System.out.println("Double value : " + d.getNumber());
  
 }
}
執行結果




以泛型類別方法寫程式時,若不同型別做指定, 例如 d = i ; 時,編譯會出現如下錯誤
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
 Type mismatch: cannot convert from GenericNumber to GenericNumber

 at GenericsUndefined.main(GenericsUndefined.java:28)

沒有留言:

張貼留言