在定義類,接口和方法時(shí),泛型使能類型(類和接口)作為參數(shù)。與在方法聲明中使用的更熟悉的形式參數(shù)非常類似,類型參數(shù)提供了一種方法,可以為不同的輸入重復(fù)使用相同的代碼。區(qū)別在于形式參數(shù)的輸入是值,而類型參數(shù)的輸入是類型。
可以對集合類(如List類)進(jìn)行一般化,以便只有該類型的集合在應(yīng)用程序中被接受。下面顯示了一般化ArrayList的示例。以下語句的作用是它只接受類型為string的列表項(xiàng) -
List<String> list = new ArrayList<String>();
在下面的代碼示例中,我們將執(zhí)行以下操作:
class Example { static void main(String[] args) { // Creating a generic List collection List<String> list = new ArrayList<String>(); list.add("First String"); list.add("Second String"); list.add("Third String"); for(String str : list) { println(str); } } }
上述程序的輸出將是 -
First String Second String Third String
整個(gè)類也可以泛化。這使得類更靈活地接受任何類型,并相應(yīng)地與這些類型工作。讓我們來看一個(gè)例子,說明我們?nèi)绾巫龅竭@一點(diǎn)。
在以下程序中,我們執(zhí)行以下步驟 -
我們正在創(chuàng)建一個(gè)名為ListType的類。注意放置在類定義前面的<T>關(guān)鍵字。這告訴編譯器這個(gè)類可以接受任何類型。因此,當(dāng)我們聲明這個(gè)類的一個(gè)對象時(shí),我們可以在聲明期間指定一個(gè)類型,并且該類型將在占位符<T>。
泛型類有簡單的getter和setter方法來處理類中定義的成員變量。
在主程序中,注意我們能夠聲明ListType類的對象,但是不同類型的對象。第一個(gè)類型是Integer類型,第二個(gè)類型是String類型。
class Example { static void main(String[] args) { // Creating a generic List collection ListType<String> lststr = new ListType<>(); lststr.set("First String"); println(lststr.get()); ListType<Integer> lstint = new ListType<>(); lstint.set(1); println(lstint.get()); } } public class ListType<T> { private T localt; public T get() { return this.localt; } public void set(T plocal) { this.localt = plocal; } }
上述程序的輸出將是 -
First String 1
更多建議: