我认为标题令人困惑,所以我只会展示一些代码:
open class Polygon {
open val vertices: List<Point>
constructor(vertices: List<Point>) {
this.vertices = vertices.toList()
class Face: Polygon {
override val vertices: List<Vertex>
其中Vertex
是Point
的子类型。
Intellij IDEA检查在Polygon的构造函数中显示此警告:
是否有更正确的方法来实现Polygon
- Face
层次结构,vertices
在派生类Vertex
中的类型列表为Face
?
答案 0 :(得分:2)
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)