第三次學JAVA再學不好就喫翔(part83)--泛型類

學習筆記,僅供參考,有錯必糾



泛型類


泛型類概述


泛型類,就是在定義類時,在類名後加一個尖括號:

public class 類名<泛型類型1,>
//一般泛型會設置爲一個大寫字母,比如<T>等等

需要注意的是,泛型類型必須是引用類型。在我們定義這個泛型時,該泛型並沒有明確的數據類型,但是當我們創建該類對象時,我們指定的泛型類型是啥(比如<Person>),這個泛型類型<T>就是啥。

比如,在我們創建ArrayList對象時,我們指定泛型爲<Person>,那我們就只能在其中添加Person類型的元素,而不能添加其他類型的元素(比如String, Integer等等),否則會在編譯時報錯:

package com.guiyang.restudy3;

import java.util.ArrayList;
import java.util.Iterator;

import com.guiyang.bean.Person;

public class D1Genric {

	public static void main(String[] args) {
		ArrayList<Person> list = new ArrayList<Person>();
		list.add(new Person("張三", 23));
		list.add(new Person("李四", 24));
		
		Iterator<Person> it = list.iterator();
		while(it.hasNext()) {
			Person p = it.next();

			System.out.println(p.getName() + "..." + p.getAge());
		}
	}
}

  • 自定義泛型類
package com.guiyang.object;

public class Tool<Q> {
	private Q q;
	
	public Q getobj() {
		return q;
	}
	public void setobj(Q q) {
		this.q = q;
	}
}

泛型方法


  • 泛型方法概述

具有一個或多個類型變量的方法,稱之爲泛型方法。泛型方法可以存在於泛型類中,也可以存在於非泛型類中。泛型方法最好與類的泛型一致,如果不一致,需要在方法上聲明該泛型。

簡而言之,泛型方法,就是把泛型定義在方法上的方法。


  • 定義格式
public <泛型類型> 返回類型 方法名(泛型類型 變量名)

  • 自定義泛型類,非靜態泛型方法,靜態泛型方法
package com.guiyang.object;

public class Tool<Q> {
	private Q q;
	
	public Q getobj() {
		return q;
	}
	public void setobj(Q q) {
		this.q = q;
	}
	
	public<T> void show(T t) {
		System.out.println(t);
	}
	public static<W> void print(W w) {
		System.out.println(w);
	}
}

注意!非靜態泛型方法的泛型可以與類的泛型類型一致,也可以不一致。但是靜態泛型方法的泛型類型必須與類的泛型類型不一致,否則,會在編譯時報錯。(媽呀,這句話好繞口)

類泛型 <Q>會在Tool類創建對象時被賦值,而靜態方法的泛型 <W>,會在我們用類名調用靜態方法時被賦值。


泛型接口


  • 泛型接口概述

簡而言之,泛型接口就是把泛型定義在接口上的接口。

  • 定義格式
public interface 接口名<泛型類型>

  • 自定義泛型接口

實現接口方式1(推薦):

interface Inter<T> {
	public void show(T t);
}

class Demo implements Inter<String> {

	@Override
	public void show(String t) {
		System.out.println(t);
	}

}

我們創建Demo類實現了Inter接口,並制定泛型爲 <String>,此時,我們重寫的show方法的泛型也應該是<String>,這是因爲,Inter接口的show方法的泛型與Inter接口泛型是一致的,而Demo類實現了該接口,就應該遵從這種規則。


實現接口方式2(不推薦):

interface Inter<T> {
	public void show(T t);
}

class Demo<T> implements Inter<T> {	 //沒有必要在實現接口的時候給自己加泛型

	@Override
	public void show(T t) {
		System.out.println(t);
	}

}

泛型通配符


  • 泛型通配符是啥?

泛型通配符就是 <?>,如果在開發過程中,我們不確定右邊接收的泛型類型,則我們可以先將左邊的泛型類型用?來代替,這個?代表的就是任意類型,比如:

List<?> list = new ArrayList<String>();
//或
List<?> list = new ArrayList<Integer>();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章