mam trzy klasy (liczba będzie prawdopodobnie rosnąć w przyszłości):Zastępowanie lista i praktyka Java
public inteface Base{ }
public class Select implements Base{ }
public class Ast implements Base{ }
public class Gt implements Base{ }
również potrzebne w klasie List
BaseList extends ArrayList<Base>{
public boolean add(Base b){
throw new UnsupportedOperationException("You should use add%ConcereteBaseType% method instead");
}
public boolean add(Select s){ }
public boolean add(Ast a){ }
public boolean add(Gt g){ }
}
Powodem, dlaczego to zrobiłem był to fakt, że nie chcę, aby ktokolwiek dodawał elementy za pomocą wskaźnika do Base
. W mojej konkretnej sytuacji byłoby to niebezpieczne.
Jednak wadą jest to, że zostanie wykryte tylko w czasie wykonywania.
Potrzebuję również do iteracji na liście.
Czy to dobra praktyka, aby robić takie rzeczy?
Jest bardziej prawdopodobne, że to wszystko jest nadużyciem dziedziczenia. Założę się, że cokolwiek masz na myśli, można osiągnąć kompozycją. – duffymo
@ Duffymo Może możesz podać przykład, aby zrozumieć rzeczy, o których mówisz? –
"Kompozycja" oznacza posiadanie 'ArrayList' jako pola zamiast rozszerzania' ArrayList'. (Zobacz na przykład odpowiedź mojego lub członków) na przykład.) – aioobe