我想构建Data
主类,其子类为DataClass1
(带有自己的子类Item
)和DataClass2
(带有自己的子类Item1
)。
public class Data{
public List<DataClass1> dataClass1List = new ArrayList<DataClass1>();
public List<DataClass2> dataClass2List = new ArrayList<DataClass2>();
public class DataClass1{
public String name;
public List<Item> itemList = new ArrayList<Item>();
public class Item{
public String n1;
public String n2;
public String n3;
}
}
public class DataClass2{
public String name;
public List<Item1> item1List = new ArrayList<Item1>();
public class Item1{
public String n5;
public String n6;
}
}
}
当我想填写主要课程Data
时,我使用此代码:
Data data = new Data();
Item itm = new Item;
itm.n1="1";
itm.n2="2";
itm.n3="3";
data.dataClass1List.itemList.add(itm);
和dataClass2List相同
所有子类必须是公开的
是否有更好的方式来声明和填写我的课程Data
感谢!!!
P.S。数据类及其子类只包含变量而不包含方法!
答案 0 :(得分:2)
你似乎在这里混淆了一些概念。
您的代码中没有子类。 DataClass1
和DataClass2
是Data
的{{3}},Item
是DataClass1
的内部类,Item1
是内部类DataClass2
。
他们没有明显的需要成为内部类,你最好避免内部类,直到你确定你需要它们,并且可能直到你更了解Java。
将这些作为内部类,您对它们的建议使用将不起作用,因为它们是非静态内部类,并且只能在外部类的实例的上下文中创建
根据类定义,您发布的使用情况的翻译大致为
Data data = new Data();
DataClass1 dc1 = data.new DataClass1();
Item itm = dc1.new Item();
itm.n1="1";
itm.n2="2";
itm.n3="3";
dc1.itemList.add(itm);
data.dataClass1List.add(dc1);
但这真的很糟糕(它可能包含错误 - 我一直在努力编译它)。拥有只有字段而没有方法的类,并以这种方式添加数据根本不是一种非常面向对象的方法。
正如WirthLuce在评论中指出的那样,您应该更改名称以表示域中的某些内容,并创建方法以使其执行适当的操作,而不是仅仅保存从外部操作的数据。
答案 1 :(得分:1)
一些建议:
public class SomeClass {
private String name;
[...]
public void setName(String name) {this.name = name;}
public String getName() {return name;}
[...]
}
要解决此问题,您需要将不同的公共类移动到不同的文件。
public final List<Item> itemList = new ArrayList<Item>();
public class Item {
public Item(String n1,String n2,String n3) {
this.n1 = n1;
this.n2 = n2;
this.n3 = n3;
}
[...]
}