1. 程式人生 > >萬用字元,泛型上下限

萬用字元,泛型上下限

一:萬用字元

因為泛型是初始化的時候才確定資料的型別,而接受這個物件或物件的這個屬性的方法確是固定的,所以需要對傳入這個方法的這些個屬性的型別進行判斷和限制,不然,一個只能出來Integer型別的方法如果傳入了String型別,這個方法執行的過程中就會出現錯誤。如果這個方法可以處理任何型別的資料,就可以使用萬用字元“ ?”來進行接收。

範例1:

package haizhu.com;

class Student<T>{
	private T name;
	public T getName() {
		return name;
	}
	public void setName(T name) {
		this.name = name;
	}
}

public class GenericDemo01 {
	public static void function(Student<?> s){				//使用“ ?”表示這個方法可以接收T對應的屬性可以是任何資料型別
		System.out.println("姓名是:"+s.getName());
	}
	public static void main(String[] args) {
		Student<String> s = new Student<String>();
		s.setName("Haizhu");
		function(s);
	}
}

二:泛型上限和下限

但是一般的時候,有些方法只能處理一部分資料型別,這時候就可以使用上限和下限來確定這個範圍,格式如下:

泛型上限:

<? extends 類>

範例2:

	public static void function(Student<? extends Number> s){
		System.out.println("姓名是:"+s.getName());
	}
表示只能接收Number這個類以及這個類的子類的資料型別。(extends表繼承,就是這個類下面的東西)

泛型下限:

<? super 類>
範例3:
	public static void function(Student<? super Number> s){
		System.out.println("姓名是:"+s.getName());
	}
表示只能接收Number這個類以及這個類的父類的資料型別。(super表父類,超過這個類的東西)