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
相關用法
- Java GregorianCalendar computeFields()用法及代碼示例
- Java GregorianCalendar computeTime()用法及代碼示例
- Java GregorianCalendar getActualMaximum()用法及代碼示例
- Java GregorianCalendar getActualMinimum()用法及代碼示例
- Java GregorianCalendar getGregorianChange()用法及代碼示例
- Java GregorianCalendar roll()用法及代碼示例
- Java GregorianCalendar setGregorianChange()用法及代碼示例
- Java GregorianCalendar add()用法及代碼示例
- Java GregorianCalendar clone()用法及代碼示例
- Java GregorianCalendar equals()用法及代碼示例
- Java GregorianCalendar getGreatestMinimum()用法及代碼示例
- Java GregorianCalendar getLeastMaximum()用法及代碼示例
- Java GregorianCalendar getMaximum()用法及代碼示例
- Java GregorianCalendar getMinimum()用法及代碼示例
- Java GregorianCalendar getTimeZone()用法及代碼示例
- Java GregorianCalendar hashCode()用法及代碼示例
- Java GregorianCalendar isLeapYear()用法及代碼示例
- Java GregorianCalendar setTimeZone()用法及代碼示例
- Java Guava Booleans.asList()用法及代碼示例
- Java Guava Floats.asList()用法及代碼示例
- Java Guava Lists.partition()用法及代碼示例
- Java Guava Bytes.asList()用法及代碼示例
- Java Guava Lists.reverse()用法及代碼示例
- Java Guava Doubles.asList()用法及代碼示例
- Java Guava Shorts.asList()用法及代碼示例
注:本文由純淨天空篩選整理自goelshubhangi3118大神的英文原創作品 Generic Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。