【发布时间】:2021-09-13 10:46:56
【问题描述】:
我有一个模糊的设置,如下所示(如果 Kotlin/伪语法令人困惑,请告诉我,我会更改它)。
我有两个派生类,它们包含其项目是派生类实例的列表。列表基类具有列表的通用功能。
我只是想知道我这样做的方式是否愚蠢。在基类中使用派生类列表 (List, List) 是否有比为列表 (List) 添加另一个属性并在每次对列表进行更改时在派生类中更新它更好的方法?
我有点想在基类 A 中声明“项目”列表属性,然后用 B 和 C 中的派生类型覆盖。使用类 A 中的方法使用列表转换为泛型基类 (List)。但你不能那样做。
干杯,希望有人对此感兴趣。
class A {
val genericItems = List<a>
methodForGenericItems() {
do something generic with/to the list
}
}
class B : A {
val items = List<b>
updateItems() {
update items
genericItems = items as List<a>
}
methodForDerivedItems() {
do something specific using the list
call methodForGenericItems()
}
}
class C : A {
val items = List<c>
updateItems() {
update items
genericItems = items as List<a>
}
methodForDerivedItems() {
do something specific using the list
call methodForGenericItems()
}
}
class a {
...
}
class b : a {
...
}
class c : a {
...
}
【问题讨论】:
-
很遗憾你没有尝试将你的伪代码重写为 Kotlin,因为那样你会发现你可以用你的代码来实现这一点:-) 为什么你认为这是不可能的?
-
另外,您是否需要直接或仅在派生类中修改
A中的项目列表?在后一种情况下,您实际上可以只使用一个属性,而无需任何同步。 -
哈哈,我是这样做的,只是觉得可能有更好的方法!有一个与另一个属性相同的附加属性似乎有点奇怪,只是转换为它的基类,并且每当你更改原始属性时都需要更新
-
A 中至少有一种方法可以修改列表。在特定索引处删除。感谢您的帮助:)
标签: list kotlin inheritance covariance declare