Koltin多类用于数据存储

时间:2019-04-23 21:21:02

标签: kotlin

我正在开发一个简单的Android应用程序,该应用程序将显示车辆的图标,用户可以单击该图标以显示车辆信息。我想在构建应用程序时动态加载数据,即数据将来自包括图标图片在内的外部来源。

我是Kotlin的新手,不确定要搜索什么以了解合适的解决方案。定义数据的正确方法是什么,最好是按如下方式创建一个类,然后创建该类的数组(不确定是否可行)

public class VehicleSpec()
{
var OEM: String? = null
var ModelName: String? = null
var EngineSize: String? = null
}

还是创建多维数组然后将数据链接到单元格更好?

var VehicleSpec = arrayOf(20,20)
VehicleSpec[0][0] = Null //OEM
VehicleSpec[0][1] = Null //ModelName
VehicleSpec[0][2] = Null //EngineSize

设置数据存储的最佳方法是什么,有什么好的参考资料可以理解应该如何设置?

2 个答案:

答案 0 :(得分:1)

首先,使用“ proca类”可以使您轻松理解并获得语言本身的全部好处...因此,请不要将数据保存在数组中..让编译器处理这些问题。

第二,我建议您有两种类型(并使用数据类;-))

data class VehicleListEntry(
  val id: Long,
  val name: String
)

data class VehicleSpec(
  val id: Long,
  val oem: String = "",
  val modelName: String = "",
  val engineSize: String = ""
)
我认为

尽可能避免使用null值。 因此,如果您有仅显示的字符串-请使用空字符串而不是null。

现在有了一个模型来存储您的数据

class VehicleModel() {
  private val specs: MutableMap<Long, VehicleSpec> = mutableMapOf()
  private var entries: List<VehicleListEntry> = listOf()

  fun getSpec(id: Long) = specs[id]
  fun addSpec(spec: VehicleSpec) = specs[spec.id] = spec
  fun getEntries(): List<VehicleListEntry> = entries
  fun setEntries(data: List<VehicleListEntry>)  {
    entries = data.toMutableList()
  }

}

您还可以为模型使用数据类,

data class VehicleModel(
  val specs: MutableMap<Long, VehicleSpec> = mutableMapOf(),
  var entries: List<VehicleListEntry> = listOf()
)

最后但并非最不重要的一个控制器,用于将东西聚集在一起

class VehicleController() {
  private val model = VehicleModel()

  init{
     // TODO get the entries list together
  }

  fun getEntries() = model.entries

  fun getSpec(id: Long) : VehicleSpec? {
     // TODO load the data from external source (or check the model first)
     // TODO store the data into the model
     // TODO return result
  }
}

答案 1 :(得分:1)

  

定义数据的正确方法是什么,最好是如下创建一个类,然后创建该类的数组

使用数组作为对象的属性并不能充分利用您在Kotlin(甚至是Java)中拥有的类型安全性。 如果要表达的是对象的多个属性,则应使用定义那些属性。如果属性具有不同的类型,则尤其如此。

在数组和类之间没有性能差异,因为在两种情况下都将获得对堆的引用。仅当您将多维数组方法转换为具有智能索引的一维数组时,您才能节省性能。在大多数情况下,除非您要处理大量数据并且知道性能在此特定级别上是个问题,否则您不应该考虑使用此选项。

  

(不确定是否可行)

定义类的列表/数组肯定是可能的。

通常,对于仅用作数据容器的类,您应该首选data classes,因为它们免费为您提供了有用的方法,并且这些方法对于简单的“数据包”完全有意义,例如您的案例( ,哈希码,组件访问等)。

data class Vehicle(
   val OEM: String,
   val ModelName: String,
   val EngineSize: String
)

此外,我建议尽可能使用val而不是var。在Kotlin中,不变性更常见。

最后但并非最不重要的一点是,如果您知道必须始终存在一个值,则最好将非null值替换为null值。在某些情况下,如果缺少该值,则应使用null而不是占位符,例如空字符串或-1。