我有这样的XML:
<horo> <aries> <today> Сегодня вас могут здорово огорчить. Если от расстройства все начнет валится из рук, просто спокойно сядьте и тихонько подождите хорошей новости. </today> </aries> <taurus> <today> Сегодня у вас могут возникнуть проблемы на личном фронте. Спасти вас от перспективы оказаться не у дел может сухой, рациональный и в высшей степени объективный подход к проблеме. </today> </taurus> </horo>
现在,我学习Kotlin进行翻新。我包括用于解析xml的库,但我不明白如何创建用于解析此xml的对象。我有对象:
@Root(name = "horo", strict = false) open class DailyHoroscope{ @get : Element(name = "aries") var aries : Aries? = null } @Root(name = "aries", strict = false) open class Aries{ @get : Element(name = "today") var today : String? = null }
但我有错误:
rg.simpleframework.xml.core.ConstructorException:默认构造函数无法接受类ac中方法“ aries”上的@ org.simpleframework.xml.Element(data = false,name = aries,required = true,type = void)只读.kotlintest.model。
更新
我用Java编写了代码:
@Root(name = "horo", strict = false) public class DailyHoroscopeJ { @Element(name = "aries") public Aries aries; public Aries getAries() { return aries; } public void setAries(Aries aries) { this.aries = aries; } } @Root(name = "aries", strict = false) class Aries{ @Element(name = "today") public String today; public String getToday() { return today; } public void setToday(String today) { this.today = today; } }
它工作正常,然后我转换为Kotlin
@Root(name = "horo", strict = false) class DailyHoroscope { @get:Element(name = "aries") var aries:Aries? = null } @Root(name = "aries", strict = false) class Aries { @get:Element(name = "today") var today:String? = null }
但我有同样的问题(((((
@daementus的答案几乎是完美的。如果要对默认参数使用构造函数注入,则必须强制Kotlin生成构造函数重载:
data class Section @JvmOverloads constructor( @field:Element(name = "id") @param:Element(name = "id") val id: Long, @field:Attribute(name = "title", required = false) @param:Attribute(name = "title", required = false) val title: String = "" )
没有它,您将获得 与Section部分不匹配的Constructor 。默认情况下,Kotlin生成具有所有参数和特殊构造函数的构造函数。
注意:我希望在评论中回答,但我的观点不够。