當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Generic用法及代碼示例


Java 泛型的引入是為了處理類型安全對象。它使代碼穩定。Java泛型方法和類,使程序員能夠使用單個方法聲明、一組相關方法、一組相關類型。泛型還提供編譯時類型安全它允許程序員在編譯時捕獲無效類型。通用的方法參數化的類型。使用泛型,其想法是允許任何數據類型成為它整數、字符串,或任何用戶自定義數據類型並且可以創建使用不同數據類型的類。

泛型類僅僅意味著項目或函數在該類中可以使用參數進行概括(例如T) 指定我們可以添加任何類型作為參數來代替 T 例如整數、字符、字符串、雙精度或任何其他用戶定義的類型。

例子:單一類型參數

class Solution<T>
{
   T data;
   public static T getData(){
       return data;
   }
}

例子:多種類型參數

public class Pair<K, V> {

    private K key;
    private V value;

    public Pair(K key, V value) {
    this.key = key;
    this.value = value;
    }

    public K getKey()    { return key; }
    public V getValue() { return value; }
}

在此示例中,我們可以使用此類的對象或實例多次使用不同的參數,如下所示T類型。如果我們希望數據是int類型,即T可以替換為 Integer,類似地也可以替換為 String、Character、Float 或任何用戶定義的類型。泛型類的聲明與非泛型類幾乎相同,隻是類名後麵跟著類型參數部分。泛型類的類型參數部分可以有一個或多個用逗號分隔的類型參數。

我們可以編寫一個通用方法聲明,可以使用不同類型的參數進行調用。根據傳遞給泛型方法的參數類型,編譯器適當地處理每個方法調用。以下是定義通用方法的規則

  • 所有泛型方法聲明都有一個由尖括號指示的類型參數部分<>位於方法的返回類型之前。
  • 每個類型參數部分可以包含一個或多個以逗號分隔的類型參數。類型參數或類型變量是指定泛型類型名稱的標識符。
  • 類型參數可用於聲明返回類型,稱為實際類型參數.
  • 泛型方法的主體的聲明方式與任何非泛型方法的主體相同。需要注意的是,類型參數隻能代表引用類型,而不是原始類型(如 int、double 和 char)。

Java 泛型的優點

1.Type-Safety:泛型中隻能保存一種類型的對象。

2. 不需要類型轉換: 不需要打字。

例子:

Before Generics 
     List l= new ArrayList();
     l.add("India");
     String s = (String) l.get(0);     // typecasting  
                                         
After Generics, typecasting of the object is not required 
      List<String> l = new ArrayList<String>();    
     l.add("hello");   
      String s = l.get(0);   

3. 編譯時檢查:它會在編譯時檢查所有與泛型相關的數據類型的錯誤,因此在運行時不會出現該問題。

List<String> list = new ArrayList<String>();    
list.add("hello");   
list.add(32);   //Compile Time Error  

對於泛型類的實例

BaseType <Type> object = new BaseType <Type>();

注意:在參數 Type 中,我們不能使用 int、char、float 等原語。

例子:

Java


// Java program to show the
// instance of a generic class
// Generic Classes
// we use <> to specify parameter
// type and we can add any datatype
// like Integer, Double, String,
// Character or any user defined
// Datatype
// Every time when we need to make an
// object of another datatype of this
// generic class , we need not to make
// the whole class of that datatype again
// instead we can simply change the
// parameter/Datatype in braces <>
public class Area<T> {
    // T is the Datatype like String,
    // Integer of which Parameter type,
    // the class Area is of
    private T t;
    public void add(T t)
    {
        // this.t specify the t variable inside
        // the Area Class whereas the right hand
        // side t simply specify the value as the
        // parameter of the function add()
        this.t = t;
    }
    public T get() { return t; }
    public void getArea() {}
    public static void main(String[] args)
    {
        // Object of generic class Area with parameter Type
        // as Integer
        Area<Integer> rectangle = new Area<Integer>();
        // Object of generic class Area with parameter Type
        // as Double
        Area<Double> circle = new Area<Double>();
        rectangle.add(10);
        circle.add(2.5);
        System.out.println(rectangle.get());
        System.out.println(circle.get());
    }
}
輸出
10
2.5




相關用法


注:本文由純淨天空篩選整理自goelshubhangi3118大神的英文原創作品 Generic Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。