Java:将不同类型的对象放入ModelCollection的ArrayList中。接口?
我想将我的模型包装在一个模型集合中,该集合主要用于ListView。集合始终具有相同的属性,如title、totalResults(用于分页),并且集合应包含ArrayList“items”中的listItem模型。 但是,这些模型有不同的类型,如“ModelCategory”或“ModelChain”,并且通常具有不同的属性和方法 如何在java中使用强大的类型规则来实现这一点?我认为这样做是正确的。我必须在哪里实施它们Java:将不同类型的对象放入ModelCollection的ArrayList中。接口?,java,interface,types,arraylist,Java,Interface,Types,Arraylist,我想将我的模型包装在一个模型集合中,该集合主要用于ListView。集合始终具有相同的属性,如title、totalResults(用于分页),并且集合应包含ArrayList“items”中的listItem模型。 但是,这些模型有不同的类型,如“ModelCategory”或“ModelChain”,并且通常具有不同的属性和方法 如何在java中使用强大的类型规则来实现这一点?我认为这样做是正确的。我必须在哪里实施它们 public class ModelCollection {
public class ModelCollection {
public ArrayList< ModelCategory OR ModelChain OR ModelXyz> items = new ArrayList<ModelCategory OR ModelChain OR ModelXyz>();
private String id;
private String title;
private Long updated;
private String linkSelf;
private int totalResults;
private int startIndex;
/*
more stuff like parsing a feed
*/
}
公共类模型集合{
公共ArrayListitems=new ArrayList();
私有字符串id;
私有字符串标题;
私人长期更新;
私有字符串链接自身;
私人投资结果;
私人int startIndex;
/*
更多的东西,比如解析提要
*/
}
为所有模型类定义一个公共接口,该接口允许访问它们共享的属性
public interface MooModel
String getTitle();
// etc
并定义
列表
使您的ModelCategory、ModelChain和ModelXyz实现一个接口。然后将您的收藏放在该界面上
例如:
public interface MyModel {
}
public class ModelCategory implements MyModel {
}
List<MyModel> list = new ArrayList<MyModel>();
公共接口MyModel{
}
公共类ModelCategory实现了MyModel{
}
列表=新的ArrayList();
要引用每个类的特定方法,需要将列表对象强制转换为正确的类型
List<MyModel> list = new ArrayList<MyModel>();
list.add(new ModelCategory());
ModelCategory model = (ModelCategory) list.elementAt(0);
List List=new ArrayList();
添加(新模型类别());
modelcegory model=(modelcegory)list.elementAt(0);
显然,您可以使用任何需要的方法来迭代您的集合。Tauren的解决方案是正确的,但请记住检查instanceof like deadsven建议的,结果如下:
List<MyModel> list = new ArrayList<MyModel>();
list.add(new ModelCategory());
for(MyModel mymodelListElement: list) {
//mymodelListElement.sameMyModelMethods()
if(ModelCategory instanceof mymodelListElement) {
ModelCategory modelCategoryElement = (ModelCategory)mymodelListElement;
} else if(ModelChain instanceof mymodelListElement) {
ModelChain modelChainElement = (ModelChain )mymodelListElement;
} else if(ModelXyz instanceof mymodelListElement) {
ModelXyz modelXyzElement = (ModelXyz)mymodelListElement;
} else {
//ignore
//or
//throw new RuntimeException("Wrong MyModel implementation")
}
}
List List=new ArrayList();
添加(新模型类别());
用于(MyModel mymodelListElement:list){
//mymodelListElement.sameMyModelMethods()
if(mymodelListElement的ModelCategory实例){
ModelCategory modelCategoryElement=(ModelCategory)mymodelListElement;
}else if(mymodelListElement的ModelChain实例){
ModelChain modelChainElement=(ModelChain)mymodelListElement;
}else if(mymodelListElement的ModelXyz实例){
ModelXyz modelXyzElement=(ModelXyz)mymodelListElement;
}否则{
//忽略
//或
//抛出新的RuntimeException(“错误的MyModel实现”)
}
}
好的,那么代码在我的视图控制器/活动中看起来如何?如何访问ModelCategory的特殊方法?使用“instanceof”关键字检查您拥有的具体模型,然后将您的对象强制转换到特定的类。对于处理每个具体模型的特殊情况,我将查看访问者模式:)您在if条件下反转了语句。。。它应该是(mymodelListElement instanceof ModelCategory)。。。。。希望能节省一些时间