Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Serializable类中的Kotlin-Init块只能读取默认属性值_Firebase_Class_Kotlin_Firebase Realtime Database_Serialization - Fatal编程技术网

Firebase Serializable类中的Kotlin-Init块只能读取默认属性值

Firebase Serializable类中的Kotlin-Init块只能读取默认属性值,firebase,class,kotlin,firebase-realtime-database,serialization,Firebase,Class,Kotlin,Firebase Realtime Database,Serialization,出于某种原因,每当我试图访问init块内部这个可序列化类的属性时,只打印默认值。我正在使用firebase将数据读入到这个类中,这个类正在按预期工作。我想根据VenuName参数更改该类的布尔值,但无法更改,因为只访问默认的场馆名称 class Venue(val venueName: String = "defaultName", val venueImageUrl: String = "", var venueImageName: String = "", val events: List&

出于某种原因,每当我试图访问init块内部这个可序列化类的属性时,只打印默认值。我正在使用firebase将数据读入到这个类中,这个类正在按预期工作。我想根据VenuName参数更改该类的布尔值,但无法更改,因为只访问默认的场馆名称

class Venue(val venueName: String = "defaultName", val venueImageUrl: String = "", var venueImageName: String = "", val events: List<Event> = emptyList(), var isAd: Boolean = false, var isPromoVenue: Boolean = false

) : Serializable {
    val vName = venueName
    init {
        println(vName)
    }
}
#prints("defaultName") for each object created. 
上课地点(val-venueName:String=“defaultName”,val-venueImageUrl:String=“”,var-venueImageName:String=“”,val-events:List=emptyList(),var-isAd:Boolean=false,var-isPromoVenue:Boolean=false
):可序列化{
val vName=venueName
初始化{
println(vName)
}
}
#为创建的每个对象打印(“默认名称”)。

此引用自文档

表示实例是使用默认构造函数通过反射创建的(在本例中相当于
Venue()
),然后将执行任何
init
块。构造实例后,字段也由反射设置(因为不需要setter)

Serializable
在这里应该不相关(但它自己的机制根本不调用
vention
的构造函数,所以你甚至看不到
defaultName
打印)

作为一种解决方法,您可以在不使用
init的情况下创建帮助器类

class VenueDTO(val venueName: String = "defaultName", val venueImageUrl: String = "", val venueImageName: String = "", val events: List<Event> = emptyList(), val isAd: Boolean = false, val isPromoVenue: Boolean = false) : Serializable {
    val asVenue get() = Venue(this)
}

class Venue(val asDto: VenueDTO) {
    val vName = venueName
    init {
        println(vName)
    }
}
类VenueDTO(val-venueName:String=“defaultName”,val-venueImageUrl:String=“”,val-venueImageName:String=“”,val-events:List=emptyList(),val-isAd:Boolean=false,val-isPromoVenue:Boolean=false):可序列化{
val asVenue get()=场地(此)
}
上课地点(val asDto:VenueDTO){
val vName=venueName
初始化{
println(vName)
}
}

VenueDTO
存储在Firebase中,并在检索到后立即将其翻译到
VenueDTO

非常感谢!只是想知道是否有任何方法可以覆盖读取对象方法?“是否有任何方法可以覆盖读取对象方法”
Serializable使用的方法是的,但如上所述,Firebase可能不使用它。