Điều gì <T>
biểu thị trong đoạn mã sau?những gì <T> có nghĩa là trong <T> void say()
class Test {
<T> void say() {
}
}
Điều gì <T>
biểu thị trong đoạn mã sau?những gì <T> có nghĩa là trong <T> void say()
class Test {
<T> void say() {
}
}
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.
Xem this doc about generics in java
Nhưng chỉ hữu ích nếu bạn có các loại tham số trong danh sách đối số.
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.
... bạn có thể xóa toàn bộ lớp AFAIK. –