Это зависит от того, если вы хотите придерживаться суперкласса просто сделать это таким образом:
Generic набрав 1
class ListHolder{
private List<? extends BaseType> listOfBaseType;
//getter and setter for listOfBaseType
public List<? extends BaseType> getListOfBaseType(){...}
public void setListOfBaseType(List<? extends BaseType>){...}
}
Exemple 1
ListHolder lh = new ListHolder();
lh.setListOfBaseType(new ArrayList<BaseTypeA>()); //OK
lh.setListOfBaseType(new ArrayList<BaseTypeB>()); //OK
List<BaseTypeB> l = lh.getListOfBaseType(); //KO too specific
List<? extends BaseType> l = lh.getListOfBaseType(); //OK
Generic типирование 2
Если вы хотите сильный контроль и безопасное преобразование (хотя с этим вы не можете смешивать типы):
class ListHolder<T extends BaseType>{
private List<T> listOfBaseType;
//getter and setter for listOfBaseType
public List<T> getListOfBaseType(){...}
public void setListOfBaseType(List<T>){...}
}
Exemple 2
ListHolder<BaseTypeA> lh = new ListHolder<BaseTypeA>();
lh.setListOfBaseType(new ArrayList<BaseTypeA>()); //OK
lh.setListOfBaseType(new ArrayList<BaseTypeB>()); //KO will not compile
List<BaseTypeB> l = lh.getListOfBaseType(); //KO will not compile
List<BaseTypeA> l = lh.getListOfBaseType(); //OK no need to cast
Общий набор 3
Если вы хотите больше гибкость, сохраняя при этом безопасность:
class ListHolder{
private HashMap<Class<? extends BaseType>, List<? extends BaseType> hashListOfBaseType;
//getter and setter for listOfBaseType
public <T extends BaseType> List<T> getListOfBaseType(Class<T> clazz){
return hashListOfBaseType.get(clazz);
}
public <T extends BaseType> void setListOfBaseType(Class<T> clazz, List<T> list){
hashListOfBaseType.put(clazz, list);
}
}
Exemple 3
ListHolder lh = new ListHolder();
lh.setListOfBaseType(BaseTypeA.class, new ArrayList<BaseTypeA>()); //OK
lh.setListOfBaseType(BaseTypeB.class, new ArrayList<BaseTypeB>()); //OK
List<BaseTypeA> l = lh.getListOfBaseType(BaseTypeA.class); //OK
List<BaseTypeB> l = lh.getListOfBaseType(BaseTypeB.class); //OK
Все зависит от того, что вам нужно .... сложный, то я могу быть более конкретным
какова цель вашего класса ? Как вы его используете? –
Как и любой другой аксессуар на самом деле ... – sp00m
Вы могли бы позволить Eclipse генерировать геттер/сеттер для вас? – sanbhat