簡體   English   中英

如何為這個網絡服務創建 kotlin 數據類?

[英]How to create kotlin data class for this network service?

我想知道在這種情況下你會采取什么方法來制作數據類,在這個 JSON 服務中

我在其他服務字段下有子類別 subCategories 中的每個項目都有一個slug字段,該字段也是其他數據元素中的字段之一,例如數字貨幣圖片打印 現在我的要求是我想根據用戶對 subCategories 項目的選擇來選擇合適的數據類。 如果用戶選擇了以下項目

 {
    "title": "電子マネー",
    "slug": "digital-currency"
 }

然后我應該能夠匹配slug字段,然后應該拿起數字貨幣數據元素

    "digital-currency": {
    "slug": "digital-currency",
    "title": "電子マネー",
    "_id": "7j6OzPKVzim7xvW8BvI8zV",
    "isSub": true,
    "parent": "other-services"
  }

我怎樣才能為此制作數據類?

您可以通過...簡化您的代碼

data class NetworkResponse(
    val otherServices: OtherServices,
    val digitalCurrency: SubCategory,
    val picture: SubCategory,
    val print: SubCategory
) {
    fun getUserSelectedCategory(slug : String) : SubCategory? {
       return when (slug) {
            "digital-currency" -> digitalCurrency
            "picture" -> picture
            "print" -> print
            else -> null
        }
    }
}

data class OtherServices(val subCategory: List<SubCategory>)
data class SubCategory(val title: String, val slug: String)

下面是我的解決方案,如果我理解正確,它只不過是在異構列表中查找給定類型的對象。 這里的DigitalCurrencyPicturePrint寵物用品……等等,都是異類。 要選擇此項中的任何一項,您使用slug字段作為標識符,您必須具有映射機制以使用給定的 json 結構為給定類型選擇正確的數據對象。

然而,每當在后端添加新數據元素時,我的解決方案都會添加 WHEN 條件。 我相信,根據這里提出的要求和 Json 結構,這不能推廣到任何擴展,它可以映射到適當的數據類,而無需在未來對代碼進行任何額外的更改。

如果您認為 Data 類可以以不需要任何代碼更改來容納新添加的數據的方式構造,請告訴我。

data class NetworkResponse(
    val otherServices: OtherServices,
    val digitalCurrency: DigitalCurrency,
    val picture: Picture,
    val print: Print
) {
    
    fun getUserSelectedCategory(slug : String) : BaseClass {
        when (slug) {
            "digital-currency" -> {
                return digitalCurrency
            }

            "picture" -> {
                return picture
            }

            "print" -> {
                return print
            }
        }
    }
    

}


data class OtherServices(val subCategory: List<SubCategory>) {
}

interface BaseClass
data class SubCategory(val title: String, val slug: String) : BaseClass
data class DigitalCurrency(val title: String, val slug: String) : BaseClass
data class Picture(val title: String, val slug: String) : BaseClass
data class Print(val title: String, val slug: String) : BaseClass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM