abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse

julian.veh

Bekanntes Mitglied
Hallo,
gibt es eine Möglichkeit, den Typ der Realisierung einer Klasse zurückzugeben?
[JAVA]
abstract class A {
abstract ??? doSth();
}
class B extends A {
//do Sth() gibt B zurück
}
[/JAVA]

Danke und LG Julian
 
Vielleicht meinst du so etwas:
Java:
public class Main {
    public static void main(String[] args) {
        System.out.println(new B().doSth());
    }
}

abstract class A {
    abstract Class<? extends A> doSth();
}

class B extends A {
    @Override
    Class<? extends A> doSth() {
        return getClass();
    }
}
 
Danke für die Antwort, wie kann ich denn zum Java Editor wechseln?
Das Problem ist, dass ich in der Main Klasse eine Beliebige Realisierung R von A mit Generics übergebe und die Main Klasse muss wissen, dass der Rückgabewert der Methode von R auch R ist. Für jedes R. Verstehst du was ich meine oder ist es zu wirr? Funktioniert natürlich mit einem Type-Cast, aber dachte vielleicht gibt es eine einfache, schönere Möglichkeit.
 
An einer anderen Stelle kann ich das Problem nicht so einfach mit einem Type-Cast lösen. Ist vielleicht auch ein einfacheres Beispiel:
In der Klasse A soll es eine abstrakte equals Methode geben, die natürlich vom jeweiligen Objekttyp ist.
Ist es üblich den Typ selbst per Generics zu übergeben? Also:
Java:
abstract class A<Type extends A> {
@Override
boolean equals(Type t);
}

class B extends A<B> {
boolean equals(B b) {...}
}
 
@julian.veh Da gibt es leider keine einfache Möglichkeit. Das mit den Generics ist das beste, was du von Java bekommst. Das habe ich auch schon an einigen anderen Stellen gesehen - ist also nicht unüblich:

Java:
class Super<Self extends Super> {
    abstract Self doSth();
}
class Sub extends Super<Sub> {

}

Das hindert aber eine Subklasse leider nicht daran, soetwas zu tun:

Java:
class Sub extends Super<Super>

oder gar soetwas

Java:
class Sub1 extends Super<Sub1> {}
class Sub2 extends Super<Sub1> {}
 

Zurück
Oben