Uaktualniam kod do Java 5 i wyraźnie nie rozumiem czegoś z Generics. Mam inne klasy, które raz wdrażają porównywalne, które udało mi się wprowadzić. Ale teraz mam klasę, która z powodu dziedziczenia kończy się próbą zaimplementowania Porównywalnych dla 2 typów. Oto moja sytuacja:Jak mogę wdrożyć opcję Porównywalne więcej niż jeden raz?
Mam następujących klas/interfejsy:
interface Foo extends Comparable<Foo>
interface Bar extends Comparable<Bar>
abstract class BarDescription implements Bar
class FooBar extends BarDescription implements Foo
z tym, pojawia się błąd „interfejs Porównywalne nie może być realizowany więcej niż raz z różnymi argumentami ...”
Dlaczego nie mogę zaimplementować funkcji compareTo (Foo foo) w FooBar, a także porównać (Bar) zaimplementowanej w BarDescription? Czy to nie jest po prostu przeciążanie metody?
Edytuj: Mam wiele zajęć, które rozszerzają BarDescription. Jeśli usuniemy parametr type dla Comparable on Bar, pozostawiając go w stanie nieprzetworzonym, to otrzymam garść ostrzeżeń kompilatora podczas sortowania wszystkich klas rozszerzających BarDescription. Czy to rozwiązałoby się z odpowiedzią na symbole wieloznaczne? Ta odpowiedź wydaje się dość skomplikowana i trudna do zrozumienia dla konserwacji.
To samo pytanie, inna sprawa. Szukasz czegoś, co nazywa się wymazaniem typu. – falstro
@row Coś o nazwie wildcards. –
@ codeman73: ale po prostu nie można tego zrobić w Javie ... Java nie obsługuje prawdziwego parametrycznego polimorfizmu. Właśnie dlatego, gdy koncentrujesz się na "OO" zamiast "idiosynchątkach Java", generics Java są w większości bezcelowe: oczywiście, są one dobre dla "zbiorów" i dla programu proceduralnego (i dlatego dobrze pasują do mentalności 99% Programiści Javy), ale po prostu w ogóle nie jest to OO. To jest mój największy problem z generykami w Javie: nie możesz mieć zarówno * Handable * i * Handable * i który renderuje generics ** bezużyteczny ** z punktu widzenia OO. –
SyntaxT3rr0r