Mam klasę abstrakcyjną, która ma metodę ogólną i chcę nadpisać metodę ogólną poprzez podstawienie określonych typów dla parametru ogólnego. Tak więc w pseudokodzie mam:Podstawowe reguły dziedziczenia i zastępowania metod Java
public abstract class GetAndParse {
public SomeClass var;
public abstract <T extends AnotherClass> void getAndParse(T... args);
}
public class Implementor extends GetAndParse {
// some field declarations
// some method declarations
@Override
public <SpecificClass> void getAndParse(SpecificClass... args) {
// method body making use of args
}
}
Ale z jakiegoś powodu nie wolno mi tego robić? Czy popełniam jakiś błąd składniowy, czy też jest to dziedziczenie i nadpisywanie niedozwolone? W szczególności dostaję błąd o numerze @Override
, ponieważ IDE Eclipse nieustannie przypomina mi o implementacji getAndParse
.
Oto, jak chcę, aby powyższy kod zadziałał. Gdzieś indziej w moim kodzie istnieje metoda, która oczekuje wystąpień obiektów, które implementują GetAndParse
, co konkretnie oznacza, że mają one metodę getAndParse
, której mogę użyć. Kiedy wywołuję getAndParse
w tej instancji, kompilator sprawdza, czy użyłem określonych instancji T
we właściwy sposób, więc w szczególności T
powinien przedłużyć AnotherClass
i powinien być SpecificClass
.
Pseudo-kod zbyt abstrakcyjny, potrzebuję więcej informacji – irreputable
Używanie 'public abstract void getAndParse (Args ... args);' nie ma sensu. Do czego służy parametr typu? W jaki sposób kompilator określa jego rzeczywistą wartość i gdzie powinien go używać? –
maaartinus
Czy możesz podać nam pełny przykład, który jest w rzeczywistości możliwy do skompilowania (poza problematycznym błędem) i powoduje zgłoszenie błędu, o którym wspomniałeś? –