我正在创建一个存储分层数据的Java类。它与XML非常相似,我将整个XML结构保留在以后由Java解析,但我们希望避免I / O开销。
相反,我希望将数据硬编码在全局变量的Java对象中。 XML代码如下所示:
<Group name="Order">
<Milestone name="Tested" value="testedDate"/>
<Milestone name="Created">
<Milestone name="Delivered" value="deliveredDate"/>
<Milestone name="Pressed" value="someString"/>
<Milestone name="Assembled" value="whatever"/>
</Milestone>
<Milestone name="Ordered" value="something"/>
</Group>
所以我用setter和getter以及多态构造函数创建了类。 Group类有一个构造函数,将name属性作为String输入,将Milestone对象数组作为另一个输入:
public Group(String name, Milestone[] milestones) { ...... }
请注意,Milestone元素可以包含相同类型的子元素。所以我创建了一个带有两个构造函数的Milestone类。第一个构造函数处理第一个Milestone元素。它只将name和value属性作为String输入。第二个构造函数将name属性作为String输入,并将Milestone对象数组作为第二个输入。
public Milestone(String name, String value) { .....}
public Milestone(String name, Milestone[] subMilestones) { ...... }
但是现在我要做的是在一行代码中实例化所有这些,如下所示:
Group[] groups = {
new Group("Order",{
new Milestone("Tested","testedDate"),
new Milestone("Created",{
new Milestone("Delivered","deliveredDate"),
new Milestone("Pressed","someString"),
new Milestone("Assembled","whatever")})
new Milestone("Ordered","something")
}
new Group("Invoice",...
...
...
};
似乎不喜欢这样。简而言之,它不喜欢我打开括号来在Group数组的声明中启动一个新的“新”Milestone对象数组。有没有办法在一行代码中完成所有这些(例如,在一个声明中,在末尾有一个分号)?
答案 0 :(得分:3)
您必须显式实例化子数组,如
Group[] groups = {
new Group("Order", new Milestone[] {
new Milestone("Tested","testedDate"),
new Milestone("Created", new Milestone[] {
new Milestone("Delivered,"deliveredDate"),
new Milestone("Pressed,"someString"),
new Milestone("Assembled,"whatever")}),
new Milestone("Ordered","something")
}
new Group("Invoice",...
...
...
};
答案 1 :(得分:0)
来自变量声明
Group[] groups = ...
编译器只知道groups
是Group
个对象的数组。它不知道内部结构。尽管如此,这个内部结构可以用单个语句构建,但你必须声明它:
Group[] groups = {
new Group("Order", new Milestone[] {
new Milestone("Tested","testedDate"),
new Milestone("Created", new Milestone[] {
new Milestone("Delivered,"deliveredDate"),
new Milestone("Pressed,"someString"),
new Milestone("Assembled,"whatever"))}
new Milestone("Ordered","something")
}
new Group("Invoice",...
...
...
};