我有一个具有多个列表依赖关系的类,如下所示。
class Test{
private List<Image> images;
private List<Text> texts;
private List<Video> videos;
.....with getter and setter
}
我需要从数据库中获取数据并将行数据拆分到这些列表中。拆分行基于检查行数据中的一个字段数据。 像..
Test test=new Test();
for(Row dataRow: rowDetails){
if(dataRow.getSubType().equalsIgnoreCase("image")){
if(test.getImages()!=null){
List images=test.getImages();
Image image=new Image();
image.setUrl(dataRow.getURL());
images.add(image);
test.setImages(images);
}else{
List images=new ArrayList<Image>();
Image image=new Image();
image.setUrl(dataRow.getURL());
images.add(image);
test.setImages(images);
}
}else if(contentModal.getSubType().equalsIgnoreCase("video")){
}else if(contentModal.getSubType().equalsIgnoreCase("text")){
}
}
请建议我实现它的最佳方法。
答案 0 :(得分:1)
由于您似乎不必修改或删除测试类中的列表,因此我建议您在这些变量的声明中初始化列表:
class Test{
private List<Image> images= new ArrayList<Image>();
private List<Text> texts= new ArrayList<Text>();
private List<Video> videos= new ArrayList<Video>();
.....with getter and setter
}
或者在构造函数本身中:
class Test{
private List<Image> images;
private List<Text> texts;
private List<Video> videos;
public Test(){
this.images=new ArrayList<Image>();
this.text=new ArrayList<Text>();
this.video=new ArrayList<Video>();
}
.....with getter and setter
}
因此,如果您不必测试列表是否已创建,那么您的代码会更容易:
Test test=new Test();
for(Row dataRow: rowDetails){
if(dataRow.getSubType().equalsIgnoreCase("image")){
Image image=new Image();
image.setUrl("some url taken from database");
test.getImages().add(image);
}else if(dataRow.getSubType().equalsIgnoreCase("video")){
}else if(dataRow.getSubType().equalsIgnoreCase("text")){
}
}
另外,我建议您修改Image,Text和Video类构造函数以接受对象所需的参数,从而简化代码:
Test test=new Test();
for(Row dataRow: rowDetails){
if(dataRow.getSubType().equalsIgnoreCase("image")){
test.getImages().add(new Image("some url taken from database"));
}else if(dataRow.getSubType().equalsIgnoreCase("video")){
}else if(dataRow.getSubType().equalsIgnoreCase("text")){
}
}
如果你想避免使用if和else块,这里最好的方法是使用一个开关块:
Test test=new Test();
for(Row dataRow: rowDetails){
swich(dataRow.getSubType()){
case "image":
test.getImages().add(new Image("some url taken from database"));
break;
case "video":
break;
case "text":
break;
}
}