【发布时间】:2023-01-28 12:34:10
【问题描述】:
我得到了有人写的这段代码:
abstract class ListItem {
companion object {
private var id = 0
fun getUUID() = id++
}
}
fun getItem(uuid: Int): ListItem? {
for (dessert in Dessert.getAllDesserts())
if (dessert.id == uuid)
return dessert
for (fruit in Fruit.getAllFruits())
if (fruit.id == uuid)
return fruit
return null
}
子类示例:
data class Fruit(
val id: Int,
val resId: Int,
val name: String,
val origin: String,
val desc: String
): ListItem() {
companion object {
private val fruits = listOf(
Fruit(getUUID(), R.drawable.f1_durian, "Durian", "Indonesia", "Often dubbed the king of fruit, durian is an unusual tropical fruit that grows throughout Southeast Asia. A large spiky outer shell reveals a creamy, almost custard-like flesh, which, besides boasting a mildly sweet flavor, is notorious for being incredibly rank-smelling."),
我不明白为什么 ListItem 是一个抽象类。没有未实现的方法。
使 ListItem 成为抽象类的动机是什么?
有人有想法吗?
【问题讨论】:
-
更大的背景是什么?
ListItem是如何子类化的?这些子类是如何使用的? -
目标是禁止直接创建此类的对象。
-
@Slaw 我添加了一个子类示例。
-
@mrmcwolf 谢谢。但这种方法的动机是什么?分别禁止直接创建的好处是什么?
-
假设您有一家水果店。你可以把水果放在看台上,对吧?除了你不能放水果,因为它没有任何意义,它是一种抽象。你必须放一些具体的东西,苹果、香蕉、梨……这是这个约束的软件实现。