Piszę program, który użyje odbicia Java (tj. Class.forName()
) do dynamicznego tworzenia instancji klasy na podstawie danych wprowadzanych przez użytkownika. Jednym z wymagań jest to, że instancja, którą tworzy mój program, musi rozciągnąć się o jedną określoną klasę I, nazywaną SomeClass
. Moje pytanie brzmi: do przechowywania tego typu klasy, czy powinienem używać ograniczonego generycznego, Class<? extends SomeClass>
, lub po prostu nieograniczonego generycznego, Class
? Zauważyłem, że niektóre książki w języku Java mówią, że klasa jest jedną z dobrych praktyk używania nieograniczonego generatora symboli wieloznacznych, ale zastanawiam się, czy ma to zastosowanie do sytuacji w moim programie.Java Generics - klasa lub klasa <? extends SomeClass>
Proszę dać mi znać, jeśli moje pytanie nie jest wystarczająco jasne lub potrzebne są jakieś informacje.
@Vulcan tak, ale to nie to co OP określony. Chce, aby wszyscy rozszerzyli 'SomeClass'. – wchargin
Byłoby czystsze po prostu użyć ['asSubclass'] (http: //docs.oracle.com/javase/7/docs/api/java/lang/Class.html#asSubclass \ (java.lang.Class \)) zamiast sprawdzać 'isAssignableFrom', a następnie samemu wyrzucać wyjątek. –
Ponadto, wciąż nie ma uzasadnienia dla niezaznaczonej obsady - twoja metoda pomocnicza powinna po prostu zwrócić 'SomeClass' i nie być generyczna. –