2013-01-10 56 views

Trả lời

8

Nó giới thiệu trình giữ chỗ loại, trong đó T có thể là khá nhiều loại. Đây là thường hữu ích nếu T là một phần của chữ ký (hoặc như một tham số hoặc một kiểu trả về):

<T> void say(T myT) {} 
say<Object>(myObject); 
say<String>(myString); 

<U> U foo(U u) { return u; } 
String s = foo<String>(""); 

Đó là hiếm khi hữu ích để giới thiệu một số loại chỉ dành riêng cho sử dụng nội bộ, như thực tế T thường là thú vị hơn cho người tiêu dùng hơn là phương pháp.

8

Trong ví dụ của bạn, điều đó thực sự không có ý nghĩa. Nhưng trong các trường hợp khác, nếu kiểu trả về của phương thức là void <T> vẫn có thể được sử dụng như kiểu tham số chung chung dự kiến. Cân nhắc

public static <T> void test(List<T> list1, List<T> list2) { 
    list1.addAll(list2); 
} 

public static void main(String[] args) throws Exception { 
    test(Arrays.asList(1, 1), Arrays.asList("1", "1")); 
} 

kiểm soát an toàn loại này, javac đưa ra một lỗi, test() dự kiến ​​danh sách cùng loại.

Một ví dụ khác java.util.Collections.fill

public static <T> void fill(List<? super T> list, T obj) { 
    .... 
}  

loại kiểm soát an toàn một lần nữa.

Các vấn đề liên quan