繁体   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