我有一些数据类,这很短,所以我将它们组合在一个文件中。
我可以在Kotlin文件中定义它们,但是它更喜欢它是类/对象中的范围,因此该文件不仅仅是一个文件,而是在类/对象下更好地分组
我能做到
object Model {
data class Result(val query: Query)
data class Query(val searchinfo: SearchInfo)
data class SearchInfo(val totalhits: Int)
}
我也可以
class Model {
data class Result(val query: Query)
data class Query(val searchinfo: SearchInfo)
data class SearchInfo(val totalhits: Int)
}
他们对我看起来都一样。什么是不同的,以及在确定数据类的范围方面是否有首选方式?
答案 0 :(得分:2)
我建议不要使用类来确定其他类的范围。正如Todd在他的回答中所解释的那样,你可以使用密封的类,它提供exhaustive when checks的实际好处。如果您不需要此功能,Kotlin有一个内置的作用域机制 - 包:
sendTextMessage(recipientId, `Howdy ${snapshot.child("userDetails/firstName").val()}! I’m Marco :)`)
sendSenderAction(recipientId, "typing_on")
setTimeout(()=>sendTextMessage(recipientId, "Botting Marco."),1000)
sendSenderAction(recipientId, "typing_on")
setTimeout(()=>sendTextMessage(recipientId, "Let me show you some of my recent work. This is the first portfolio bot ever. (afaik) :p"),5000)
sendSenderAction(recipientId, "typing_on")
setTimeout(()=>sendTextMessage(recipientId, "How many minutes do you have?"),7000)
userRef.update({stage:1, class:1, awaiting: true})
我可以在Kotlin文件中定义它们,但是它更喜欢它是类/对象中的范围,因此该文件不仅仅是一个文件,而是在类/对象下更好地分组
包含多个顶级元素的文件没有任何问题。这是一个有用的语言功能,在这种情况下使用。
答案 1 :(得分:0)
另一种选择是使所有数据类成为密封的Model
类的子类。这将为您提供在一个地方定义它们的好处,因为Kotlin对密封类强制执行。此外,让类型系统知道Model
类型的所有实例在when
表达式中也很有用,因为它不会要求您放置else ->
块。
sealed class Model
data class Result(val query: Query) : Model()
data class Query(val searchinfo: SearchInfo) : Model()
data class SearchInfo(val totalhits: Int) : Model()
你可以直接使用它们:
val r = Result(Query(SearchInfo(3))
而不是将它们包装在另一个class
或object
中,而不是像这样引用它们:
val r = Model.Result(Model.Query(Model.SearchInfo(3)))