2010-07-30 32 views

Trả lời

28

Bí quyết được sử dụng ở đây là chữ ký của các loại siêu chung được lưu trữ trong các lớp con và do đó tồn tại xóa.

Nếu bạn tạo một lớp con nặc danh new TypeLiteral<List<String>>() {} Guice có thể gọi getClass().getGenericSuperclass() vào nó và có được một java.lang.reflect.ParameterizedType trên đó tồn tại một phương pháp để có được getActualTypeArguments()List<String> như một thể hiện của ParameterizedType.

7

Bằng cách kết hợp các loại ẩn danh, phân lớp con và thực tế là Java không xóa hoàn toàn tất cả các khai báo chung.

Nếu bạn xem xét chặt chẽ TypeLiteral có một hàm tạo được bảo vệ, do đó bạn sử dụng {} bổ sung khi xây dựng một cái mới tạo lớp con ẩn danh của TypeLiteral.

Trong các khai báo chung Java được lưu giữ trên khai báo lớp và phương thức, vì vậy nếu tôi viết này.

public abstract class Class1<T> 
{ 
} 

public class Class2 extends Class1<Integer> 
{ 
} 

Tôi thực sự có thể viết mã trong Class1 có thể tìm ra rằng loại chung của riêng nó là Số nguyên nếu Class2 là lớp con.

Kiểm tra API java.lang.Class cho các phương thức thích hợp (chúng có chung trong tên).

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