По сути я хочу сделать что-то вроде этого:Могу ли я использовать привязку типа по абстрактному методу Scala, а затем «подтянуть» определение в подклассе?
class Shape
class CoordSystem
class C3D(val x: Double, y: Double, z: Double) extends CoordSystem
class C2D(val x: Double, y: Double) extends CoordSystem
abstract class Shape {
def getCoords[C <: CoordSystem]: List[C]
}
class Pyramid extends Shape {
def getCoords: List[C3D] =
List(new C3D(1,2,1), new C3D(1,1,1), new C3D(2,2,1), new C3D(2,1,1), new C3D(1.5,1.5,3))
}
>> error: class Pyramid needs to be abstract, since method getCoords in class Shape of type [C <: CoordSystem]List[C] is not defined
Я видел горстка различных идей на this answer, но ни один из них не кажется, вполне подходит для этого случая - потому что они, кажется, не подведи меня напишите код в другом месте, который относится к myShape.getCoords
, как если бы он был правильно определен в подклассе Shape
, возвращая список объектов из подкласса CoordSystem
.
Я также нашел an interesting discussion about generics в списке рассылки Scala Lang, но не смог полностью привязать его к моей ситуации.
Любая помощь с благодарностью оценили!
Большое спасибо Жан-Филипп - это сработало как шарм! –