java泛型方法
/**
* 測(cè)試泛型方法 非靜態(tài)方法 靜態(tài)方法
*/
public class Test4 {
? ?//不在類的聲明上使用泛型
? ?public <T> void setName(T name){
? ? ? ?//在返回值類型前面加<>泛型 泛型T在方法內(nèi)有效 可以在返回值類型、形參列表和方法體內(nèi)使用T
? ? ? ?System.out.println(name);
? ?}
? ?public <T> T getName(T name){
? ? ? ?return name;
? ?}
? ?public static void main(String[] args) {
? ? ? ?Test4 t4 = new Test4();
? ? ? ?t4.setName(123);
? ? ? ?//泛型方法在調(diào)用時(shí)不需要<>聲明類型 編譯會(huì)自行判斷
? ? ? ?//這里傳入123 編譯判斷為Integer 將T變?yōu)樵擃愋?/span>
? ? ? ?t4.setName("asd");
? ? ? ?//每次調(diào)用不會(huì)互相影響 ?每次獨(dú)立判定T的類型
? ? ? ?Integer name = t4.getName(455);
? ? ? ?//在定義泛型方法時(shí)雖然set get方法都是<T> 但兩個(gè)的T不相干 泛型方法與泛型方法之間不統(tǒng)一類型
? ? ? ?System.out.println(name);
? ? ? ?String name1 = t4.getName("qwe");
? ? ? ?//每次調(diào)用不互相影響
? ? ? ?System.out.println(name1);
? ?}
}
class Test5<T>{
? ?//定義泛型類
? ?private T flag;
? ?public void setFlag(T flag){
? ? ? ?//非靜態(tài)方法 使用外部調(diào)用時(shí)設(shè)定的T類型
? ? ? ?this.flag = flag;
? ?}
? ?public T getFlag(){
? ? ? ?//T可以用在返回類型、形參列表和方法體中
? ? ? ?return this.flag;
? ?}
? ?public <T> void printName(T name){
? ? ? ?//設(shè)定泛型非靜態(tài)方法 泛型方法中的T不再是泛型類中的T 方法內(nèi)調(diào)用方法的T
? ? ? ?System.out.println(name);
? ?}
? ?public static <T> T getName(T name){
? ? ? ?//泛型靜態(tài)方法無法調(diào)用泛型類中的T 必須在方法上定義泛型 方法內(nèi)也無法使用泛型類的T
? ? ? ?return name;
? ?}
? ?public static void main(String[] args) {
? ? ? ?Test5<Integer> i5 = new Test5<>();
? ? ? ?//設(shè)定類的T為Integer
? ? ? ?i5.setFlag(5);
? ? ? ?System.out.println(i5.getFlag());
? ? ? ?//調(diào)用類的T的非靜態(tài)方法 隨類變?yōu)榱薎nteger
? ? ? ?i5.printName("asd");
? ? ? ?//泛型非靜態(tài)方法 編譯時(shí)自行判斷方法的T 這里沒有調(diào)用類的Integer
? ? ? ?//非靜態(tài)方法既可以通過泛型類的T設(shè)定類型 也可以通過方法聲明<T>自己設(shè)定
? ? ? ?Boolean name = Test5.getName(true);
? ? ? ?//泛型靜態(tài)方法只能通過方法聲明T 調(diào)用時(shí)同樣不需要<>設(shè)定
? ? ? ?if (name){
? ? ? ? ? ?System.out.println(name);
? ? ? ?}
? ?}
}