我有以下班級,我想讓這個班級成為一個密封的班級。你能幫我嗎,因為我是 Kotlin 的新手。
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes(
JsonSubTypes.Type(value = A:class, name = "PIZZA"),
JsonSubTypes.Type(value = B::class, name = "DONUT"),
JsonSubTypes.Type(value = C::class, name = "ICECREAM"),
JsonSubTypes.Type(value = D::class, name = "CHOCOLATE"),
)
open class food (var type: foodType, var quantity : String) {
open val taste : String=""
}
如何使這個密封類成為密封類的子類,以及如何實體化它?
foodType 是列舉類
enum class foodType {
PIZZA,
DONUT,
ICECREAM,
CHOCOLATE
}
根據另一篇文章,我有以下內容,但我對傳遞正確的引數感到困惑。有人可以幫我理解我需要傳遞什么引數嗎?
sealed class food (var type: foodType, var quantity: String) {
class favFood(taste: String): food(?, ?)
}
uj5u.com熱心網友回復:
什么是密封類?
當你創建一個密封類時,你只允許你創建的實作,就像一個列舉(只允許你添加的常量)。編譯模塊后,您不能再添加任何其他實作(與開放類相反)。
這是關于密封類的 Kotlin 檔案的鏈接:https ://kotlinlang.org/docs/sealed-classes.html
當您想將實作限制為嚴格的命題時,密封類很有趣。您的用例可能就是這種情況,以限制您允許的 jsonSubTypes(其他人不會被映射)。
如何將公開課轉為密封課?
因此,要將您的開放類轉換為密封類,您通常只需將關鍵字更改open為sealed. 但是,您還需要了解繼承機制如何與密封類一起作業。
對于你的例子
使用JsonSubType,您只需type使用您選擇的常量將屬性映射到密封類的實作。
此外,您必須在擴展密封類的屬性時為其提供值,因此在創建實作時也是如此。
在下一個示例中,您可以了解如何為密封類屬性賦值,以及使用 JSonSubType 將其映射到 json 時的結果:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes(
JsonSubTypes.Type(value = Pizza::class, name = "Pizza"),
JsonSubTypes.Type(value = Donut::class, name = "DonutDesert"), // As you can see, name is a value you give, not always need to be the class name
JsonSubTypes.Type(value = IceCream::class, name = "IceCream")
)
sealed class Food(val taste: String)
class Pizza(val size: PizzaSize, taste: String) : Food(taste) {
enum class PizzaSize {
SMALL,
MEDIUM,
LARGE
}
}
class Donut(val glaze: String, taste: String) : Food(taste)
class IceCream(val servings: Int, taste: String) : Food(taste)
class Basket(foods: List<Food>)
/* If you map a Basket to JSON, it will give you this :
{ foods: [
{ "type": "Pizza", "size": "MEDIUM", "taste": "Hawaii" },
{ "type": "DonutDesert", "glaze": "Sugar & Marshmallows", "taste" : "chocolate"},
{ "type": "IceCream", "servings": 3, "taste": "Strawberry" }
]}
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510473.html
標籤:科特林仿制药kotlin 协程kotlin-多平台kotlin-android-扩展
