考虑以下xml文件
<Dataset>
<Table1>
<colA>AAA</colA>
<colB>BBB</colB>
</Table1>
<Table1>
<colA>aa</colA>
<colB>bb</colB>
</Table1>
<Table2>
<colX>xxx</colX>
</Table1>
</Dataset>
构造一个类来保存该文件中的记录(使用外部类的ArrayList)的最佳方法是什么?
我尝试使用内部类,例如:
class Dataset {
inner class Table1 {
var colA:String = ""
var colB:String = ""
}
inner class Table2 {
var colX:String = "x"
}
}
问题是-当我创建Dataset类的实例时,即使我可以读取它们,也无法设置内部类的属性(是因为它们没有被实例化吗?)换句话说,以下代码的输出是xx而不是xOK
val dataset = Dataset()
print("${dataset.Table2().colX}") //returns x as in the class declaration
dataset.Table2().colX = "OK"
print("${dataset.Table2().colX}") //returns x, but I want it to return OK
我可以在外部类中实例化内部类时设置属性:
class Dataset {
val table1 = Table1()
val table2 = Table2()
inner class Table1 {
...
但是正如我之前提到的,我使用ArrayList 这意味着(如果我正确理解的话,当我为一个Table1条目创建一个数据集,然后将其追加到ArrayList时,即使没有使用它,我仍然在该数据集中实例化了dataset.table2。 我也可以像这样实例化内部类:table1 = Dataset().Table1()
只要可以将它们添加到现有数据集实例中
val dataset = Dataset()
dataset.Table1() = table1 //this bit doesn't work for me :(
所以总结一下:
1)关于如何更好地构造Dataset类的任何想法?
2)如果不是,如何在内部类的外部类的实例中设置内部类的属性?
请考虑以下xml文件
您对表1和表2的定义只不过是类定义,因此,是的,您需要参数来表示它们的实例。问题不仅在于未实例化它们,而且根本没有用于它们的属性。
您在需要其他类之一时实例化外部类副本的想法没有任何意义。编译器要求您这样做的唯一原因是在这些类定义中使用了关键字inner
。由于它们没有与数据集共享的引用,因此它们不必为inner
。