Я хочу иметь общий векторный абстрактный класс / черту, который определяет определенные методы, например:
trait Vec
{
def +(v:Vec):Vec
def *(d:Double):Vec
def dot(v:Vec):Double
def norm:Double
}
Я хочу, чтобы Vec2D
и Vec3D
extension Vec
:
class Vec2D extends Vec { /* implementation */ }
class Vec3D extends Vec { /* implementation */ }
Но как, например, сделать так, чтобы Vec2D
можно было добавлять только к другим Vec2D
, а не к Vec3D
?
Прямо сейчас я просто реализую Vec2D
и Vec3D
без общего Vec
предка, но это становится утомительно с дублированным кодом.Я должен реализовать все свои классы геометрии, которые зависят от этих классов (например, Triangle
, Polygon
, Mesh
, ...) дважды, один раз для Vec2D
и снова для Vec3D
.
Я вижу реализации Java: javax.vecmath.Vector2d
и javax.vecmath.Vector3d
не имеют общего предка.В чем причина этого?Есть ли способ преодолеть это в скале?