Dziedziczenie po klasie abstrakcyjnej z generyczna metodą

0
public class Soldier{ }
public abstract class Squad {
    public abstract <T> T getSoldiers();
}
public class Sniper  extends Squad{
    Soldier soldier;
    public Soldier getSoldiers(){
        return soldier;
    }
}
public class RegularSquad extends Squad{
    Soldier captain;
    List<Soldier> soldiers;

    public List<Soldier> getSoldier(){
        List<Soldier> allSoldiers = new ArrayList<>();
        allSoldiers.add(captian);
        allSoldiers.addAll(soldiers);
        return so;
    }
}

Czy taka konstrukcja jest poprawna. Chodzi mi tu o dziedziczenie generycznej funkcji getSoldier z Squad. Niby wszystko smiga w mainie, w zależności co sobie stworze RegularSquad czy Sniper to funkcja zwraca mi albo liste albo pojedyńczego żołnierza. Chciałem się dowiedzieć czy taką praktykę można stosować i czy nie niesie za sobą jakiś gorszych konsekwencji.

0

Nie wiedząc w jakich warunkach i jak chcesz to potem obsługiwać ciężko coś powiedzieć.
Czemu generyczna/zwraca co innego?

Użyj tej metody. Np.: napisz funkcję która używa metody z obiektów klasy Sniper, metody z obiektów klasy RegularSquad, metod z obiektów obu klas (dziedziczących po Squad).
Konsekwencje sam zobaczysz.

0

Może i działa, ale sensu specjalnie nie ma. Zakładając, że Squad to kolekcja żołnierzy, to sensowniej byłoby napisać tak:

public abstract class Squad<T> {
    public abstract T getSoldiers();
}

Przy okazji zmień klasę abstrakcyjną na interface.

Zwracanie listy, albo pojedynczego obiektu jest zwyczajnie bez sensu, lepiej jest zwrócić w przypadku klasy Sniper listę z jednym obiektem, bez bawienia się na siłę w generyki. Jedyne, co osiągnąłeś tak pisząc kod, to to, że metoda get soldiers zwraca nie wiadomo co.

1 użytkowników online, w tym zalogowanych: 0, gości: 1