Powiedzmy mam następujących klas:Dodawanie do Generic Zestaw przekazywane do metody
- Animal
- Cat
- Dog
- Krowa
zwierząt jest podstawa klasa, kot, pies i krowa dzielą je na podklasy.
Mam teraz Set<Cat>
, Set<Dog>
i Set<Cow>
każda z nich są stosowane w taki sam sposób, więc ma to sens, aby rodzajowe funkcji do działania na nich
private boolean addObject(Animal toAdd, Animal defVal, Set<? extends Animal> vals)
to działa świetnie, mogę dowolnie przechodzić w moich zestawach bez problemu.
Pojawia się problem: Nie mogę dodać zwierzęcia, które ma być dodane do parametrów. Googling ujawnia, że jeśli zmienię metodę odczytu:
private boolean addObject(Animal toAdd, Animal defVal, Set<? super Animal> vals)
Będę w stanie dodać zwierzę do parametru vals. To działa, z wyjątkiem teraz, nie mogę przejść w mojej subklasie moje Zestawy koty, psy i krowy. Dalsze badania mówi mi, że następujące prace, bez ostrzeżenia do bagażnika:
private <T> boolean addObject(T toAdd, T defVal, Set<? super T> vals)
Problem jest, muszę być w stanie wykonać wywołuje metodę, że wszyscy mają zwierzęcia. To jest łatwo zdobyć wokół pomocą prostego Obsada:
((Animal)toAdd).getAnimalType()
Czy istnieje sposób wokół tego problemu, więc mogę zachować ogólną funkcjonalność, a nie wymagają odlewania? Oprócz tworzenia moich zestawów wszystkie zestawy typu podstawowego, zwierzę w przypadku tego przykładu?
* czy jest sposób, w jaki mogę użyć <> bez użycia kodu HTML? * => Tak, zobacz moje zmiany. Rzadko musisz używać html na SO. – assylias
+1 Dla twoich wcześniejszych badań. To rzadkość na tej stronie, niestety. –
@assylias dzięki za to. Teraz, gdybym tylko pamiętał, że następnym razem będę musiał zadać pytanie. – Legowaffles