我认为标题令人困惑,所以我只显示一些代码:
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
?
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句