2010-04-01 32 views

Trả lời

6

element.getClass().getSimpleName() có thể sẽ làm những gì bạn đang mong đợi.

+0

K.class.getSimpleName() cũng có thực hiện thủ thuật không? Đã hơn 10 năm kể từ khi tôi java'd vì vậy tôi đã bỏ lỡ generics. Tôi có thể sai. – spender

+0

Nhưng nếu biến phần tử không được khởi tạo, có cách nào khác để lấy kiểu không có ngoại lệ con trỏ null không? –

+3

K.class sẽ không hoạt động (có thể không biên dịch). Và có, bạn cần phải kiểm tra. Và không, không có cách nào khác vì loại tẩy xoá (không có thông tin thời gian chạy về K trừ khi bạn tự lưu trữ nó). – Thilo

6

type erasure, bạn không thể biết thông số loại là gì khi lớp học được xây dựng. Nhưng bạn có thể sử dụng element.getClass() để lấy kiểu thời gian chạy của phần tử (có lẽ là một lớp con của tham số kiểu, mặc dù nó không được bảo đảm - có thể có một diễn viên không được kiểm soát).

Tuy nhiên, có một số thủ thuật cho phép truy cập vào các thông số loại. Có một số thủ thuật mà Guice can do. Ngoài ra nếu bạn tạo một lớp con của Foo, như thế này: Foo<Integer> foo = new Foo<Integer>(){}; (chú ý {} làm cho nó trở thành một phân lớp ẩn danh của Foo), thì có thể truy cập vào tham số kiểu với ParameterizedType type = (ParameterizedType) foo.getClass().getGenericSuperclass() và sau đó gọi phương thức ParameterizedType. Đây là tính năng của API phản chiếu của Java mà Guice cũng tận dụng.

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