在Kotlin中创建代表嵌套xml的类的最佳方法

问题描述 投票:0回答:1

考虑以下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文件AAA

BBB
kotlin inner-classes
1个回答
1
投票

您对表1和表2的定义只不过是类定义,因此,是的,您需要参数来表示它们的实例。问题不仅在于未实例化它们,而且根本没有用于它们的属性。

您在需要其他类之一时实例化外部类副本的想法没有任何意义。编译器要求您这样做的唯一原因是在这些类定义中使用了关键字inner。由于它们没有与数据集共享的引用,因此它们不必为inner

© www.soinside.com 2019 - 2024. All rights reserved.