Java泛型语法设置器
我有这两个类,我需要从父类初始化子类fildsJava泛型语法设置器,java,generics,Java,Generics,我有这两个类,我需要从父类初始化子类filds public class A { protected LazyFacade<E> list; protected LazyDataModel<E> model; protected MyObject myObject; protected LazyDataModel<E> buildModel() { lazyModel = new LazyDataMo
public class A {
protected LazyFacade<E> list;
protected LazyDataModel<E> model;
protected MyObject myObject;
protected LazyDataModel<E> buildModel() {
lazyModel = new LazyDataModel<E>() {
public List<E> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
List<E> resultList = null;
try {
setRowCount((int) list.countObjects(myObject, filters));
resultList = list.listObject(myObject, first, pageSize, sortField, sortOrder, filters);
} catch (PersistenceException e) {
}
return resultList;
}
};
return lazyModel;
}
//getters setters
}
public class B extends A {
public B() {
this.list = new LazyFacade<OtherClass>(); **//is it correct way to instantiate the list???**
this.myObject = getObjectInDataBase();
this.model = buildModel(); **//the model must have the same class of LazyFacade, in this case OtherClass.
//How could i do it?**
}
}
公共A类{
受保护懒汉名单;
保护懒散数据模型;
受保护的肌体;
受保护的LazyDataModel buildModel(){
lazyModel=新的LazyDataModel(){
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
列表结果列表=null;
试一试{
setRowCount((int)list.countObjects(myObject,filters));
resultList=list.listObject(myObject,first,pageSize,sortField,sortOrder,filters);
}捕获(持久异常e){
}
返回结果列表;
}
};
返回lazyModel;
}
//吸气剂二传手
}
公共类B扩展了A{
公共图书馆B(){
this.list=new LazyFacade();**//实例化列表的方法正确吗**
this.myObject=getObjectInDataBase();
this.model=buildModel();**//该模型必须具有相同的LazyFacade类,在本例中为OtherClass。
//我怎么做呢**
}
}
尝试将公共A类{
更改为公共A类{
问题出在哪里?你认为E
是什么?好吧,丹尼尔,但我不想在类B中创建一个新的a。我需要初始化子类中的字段,因为只有在子类中我才知道参数E type。this.list=new LazyFacade();似乎可以工作。但我如何在子类中设置模型字段的E参数?抱歉,也许我不理解这个问题,但我认为您需要在类声明行中包含该泛型,否则您将得到一个错误。此外,要实例化超类的字段,您可能需要更改this.model=buildModel()
到this.model=super.buildModel();
尝试将B类更改为public类B扩展A{public B(){this.list=new LazyFacade();this.myObject=getobjectinadabase();this.model=buildModel();}
然后使用以下命令实例化B对象:B test=new B();