thể trùng lặp:
Why are not all type information erased in Java at runtime?truy cập thông tin kiểu tham số khi chạy
Generics Java được thực hiện thông qua loại tẩy xoá, vì vậy tôi nghĩ rằng nó là không thể nhận được bất kỳ thông tin về các loại tham số trong thời gian chạy. Tuy nhiên, tôi đã tìm thấy lớp sau trong thư viện Jackson.
(Tôi đã đơn giản hóa lớp hơi vì lợi ích của ví dụ này)
public abstract class TypeReference<T> {
final Type _type;
protected TypeReference() {
Type superClass = getClass().getGenericSuperclass();
_type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public Type getType() { return _type; }
}
Lớp cung cấp quyền truy cập vào đó là kiểu tham số khi kiểm tra dưới đây trình bày:
void testTypeReference() {
// notice that we're instantiating an anonymous subclass of TypeReference
TypeReference<CurrencyDto> tr = new TypeReference<CurrencyDto>() {};
assert tr.getType() == CurrencyDto.class
}
lớp này minh họa rằng các tham số kiểu thực tế có thể được lấy ra trong thời gian chạy (sử dụng sự phản chiếu), làm thế nào điều này phù hợp với khái niệm rằng Java Generics được thực hiện thông qua xóa bỏ kiểu?
Tôi không cho rằng đây là bản sao của câu hỏi khác. Câu hỏi đó hỏi _why_ trình biên dịch lưu trữ thông tin đó, khi mà điều này yêu cầu một lời giải thích về cách điều này phù hợp với khái niệm xóa bỏ kiểu. – ColinD