Java方法返回值前面的<T>是啥?
阿新 • • 發佈:2018-11-13
Java方法返回值前面的是什麼?
它的作用是“定義泛型”
一段簡單的程式碼
class Show<T> { public void print1(T t) { System.out.println(t); } public <T> void print2(T t) { System.out.println(t); } } public class Demo { public static void main(String[] args) { Show<String> show = new Show<String>(); show.print1(new Integer(1));// 不能編譯 show.print2(new Integer(1));// 可以編譯 } }
Show類定義了泛型T,它有兩個print方法,兩個方法只有一點差別,print2有,而print1沒有。
Demo類例項化Show類,並將泛型型別定義為String型別,卻為兩個print方法傳入Integer型別的物件。print2可以編譯,而print1不可編譯。
print1中的泛型與show物件的泛型相同,都是String,因此不能傳入Integer型別的引數。而print2方法自定義了一個泛型T,因此方法引數型別不受物件泛型型別限制,這樣定義的話這個方法是可以傳入任意型別的引數的。
其它問題
IDE(Eclipse)警告“The type parameter T is hiding the type T”,這是因為print2方法定義的泛型名與類定義的泛型名相同,都為T。將print2方法的泛型名改為E,或是其它的,就不會有警告了。如果同名的話,呼叫方法時方法的泛型將覆蓋物件的泛型。