gpt4 book ai didi

oop - Kotlin:如何将作为集合的类变量覆盖为子类型的集合

转载 作者:行者123 更新时间:2023-12-02 12:48:18 25 4
gpt4 key购买 nike

我认为标题令人困惑,所以我只显示一些代码:

open class Polygon {
open val vertices: List<Point>
constructor(vertices: List<Point>) {
this.vertices = vertices.toList()

class Face: Polygon {
override val vertices: List<Vertex>

其中 VertexPoint的子类型。

Intellij IDEA检查在Polygon的构造函数中显示此警告:

有没有更正确的方法来实现 Polygon- Face层次结构,而 vertices是派生类 VertexFace的类型列表?

最佳答案

使用通用类型

open class Polygon {
open val vertices: List<Point>
constructor(vertices: List<Point>) {
this.vertices = vertices.toList()

class Face: Polygon {
override val vertices: List<Vertex>

您可以使Polygon具有通用参数:
open class Polygon<T: Point> {
open val vertices: List<T>

constructor(vertices: List<T>) {
this.vertices = vertices.toList()
}
}

class Face(vertices: List<Vertex>): Polygon<Vertex>(vertices)

这样,您无需重新定义字段,从而减少了重复。

使用主要构造函数

您可以像下面这样进一步清理代码:
open class Polygon<T: Point>(val vertices: List<T>)
class Face(vertices: List<Vertex>): Polygon<Vertex>(vertices)

关于oop - Kotlin:如何将作为集合的类变量覆盖为子类型的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49162835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com