萬用字元,泛型上下限
阿新 • • 發佈:2019-02-08
一:萬用字元
因為泛型是初始化的時候才確定資料的型別,而接受這個物件或物件的這個屬性的方法確是固定的,所以需要對傳入這個方法的這些個屬性的型別進行判斷和限制,不然,一個只能出來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:
表示只能接收Number這個類以及這個類的父類的資料型別。(super表父類,超過這個類的東西)public static void function(Student<? super Number> s){ System.out.println("姓名是:"+s.getName()); }