问题描述
在这种JSON服务中,我想知道在这种情况下您将采取什么方法来制作数据类
我在其他服务字段下有 subCategories 。 subCategories中的每个项目都有一个 slug 字段,该字段也是其他数据元素(例如- digital-currency , 图片 , 打印 。现在,我的要求是我想根据用户对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)
,
下面是我的解决方案,如果我正确理解它,那就是在异构列表中找到给定类型的对象。此处 DigitalCurrency , 图片 , 打印 , 宠物用品 ,等等,都是异构类型。要选择此项中的任何一项,请使用 slug 字段作为标识符,您必须具有映射机制才能为具有给定json结构的给定类型选择正确的数据对象。
但是,每次在后端添加新的数据元素时,我的解决方案都会添加WHEN条件。我相信,根据此处的要求和Json结构,这不能泛化为可以扩展到适当数据类的任何扩展,而无需将来对Code进行任何其他更改。如果您认为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