Có thể thực hiện được, nhưng type erasure có thể gây khó khăn cho bạn. Khi các câu trả lời khác thảo luận, bạn phải tạo một lớp con của ParameterizedClass
hoặc thêm một trường loại T
vào ParameterizedClass
và mã phản chiếu bạn cần thực hiện là phức tạp.
gì tôi khuyên bạn nên trong những trường hợp này, là để làm việc xung quanh vấn đề như thế này:
class ParameterizedClass<T> {
private Class<T> type;
/** Factory method */
public static <T> ParameterizedClass<T> of(Class<T> type) {
return new ParameterizedClass<T>(type);
}
/** Private constructor; use the factory method instead */
private ParameterizedClass(Class<T> type) {
this.type = type;
}
// Do something useful with type
}
Do suy luận kiểu của Java cho các phương pháp tĩnh, bạn có thể xây dựng lớp học của bạn mà không cần quá nhiều boilerplate thêm:
ParameterizedClass<Something> foo = ParameterizedClass.of(Something.class);
Bằng cách đó, ParameterizedClass
của bạn hoàn toàn chung chung và loại an toàn và bạn vẫn có quyền truy cập vào đối tượng lớp học.
EDIT: Kính gửi bình luận
Nó *** có thể xảy ra. Câu trả lời này là sai. Kiểm tra câu trả lời khác có giải pháp. –
@AdamArold Tôi đã không biết nó tại thời điểm tôi đã viết câu trả lời, nhưng bạn nói đúng. Tôi vẫn không khuyên bạn nên nó, mặc dù. Tôi đã cập nhật câu trả lời của mình cho phù hợp. – jqno