Można to zrobić, ale type erasure może to bardzo trudne. Jak inne odpowiedzi dyskutują, albo musisz zrobić podklasę ParameterizedClass
lub dodać pole typu T
do ParameterizedClass
, a kod odbicia, który musisz zrobić, jest zawiłowany.
Co mogę polecić w tych okolicznościach jest obejść ten problem tak:
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
}
ze względu na rodzaj wnioskowania Java dla metody statyczne, można skonstruować swoją klasę bez zbytniego dodatkowego boilerplate:
ParameterizedClass<Something> foo = ParameterizedClass.of(Something.class);
W ten sposób Twoja ParameterizedClass
jest w pełni generyczna i bezpieczna, a ty nadal masz dostęp do obiektu klasy.
EDIT: Skierowany komentarz
It *** IS *** possible. Ta odpowiedź jest błędna. Sprawdź drugą odpowiedź, która ma rozwiązanie. –
@AdamArold Nie wiedziałem o tym jeszcze w momencie, gdy pisałem odpowiedź, ale masz rację. Wciąż tego nie polecam. Odpowiednio zaktualizowałem swoją odpowiedź. – jqno