z klasy abstrakcyjnej Chcę zdefiniować metodę, która zwraca „to” dla podklasy:Zwracanie obiektów podklasy z rodzajowych
public abstract class Foo {
...
public <T extends Foo> T eat(String eatCake) {
...
return this;
}
}
public class CakeEater extends Foo {}
Chcę być w stanie robić takie rzeczy jak:
CakeEater phil = new CakeEater();
phil.eat("wacky cake").eat("chocolate cake").eat("banana bread");
Prawdopodobnie chleb bananowy rzuciłby wyjątek IllegalArgumentException z komunikatem "Not a cake!"
Powinien być 'Foo>'. To działa, chociaż możesz łatwo stworzyć klasę, która wysadzi się w "Wyjątek ClassCastException", gdy nazwiesz 'eat', na przykład' Bar klasy rozszerza Foo '. –
ColinD
To jest rozwiązanie, którego użyłem, ale zauważysz, że powrót ma niezaznaczone ostrzeżenie o obsadzie. Logicznie rzecz biorąc, sensowne jest, że możemy rzutować na T, ponieważ jest to podklasa T. – Sarabjot
Tak.W lepszym świecie Java mogłaby mieć typ 'This', który byłby bardzo przydatny w wielu przypadkach. – irreputable