我想有一个一般的矢量抽象类/性状,指定某些方法中,例如:适当类层次矢量
trait Vec
{
def +(v:Vec):Vec
def *(d:Double):Vec
def dot(v:Vec):Double
def norm:Double
}
我想有Vec2D
和Vec3D
延伸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
没有共同的祖先。这是什么原因?有没有办法在scala中克服它?
点。语法是正确的,一切!我猜java不支持这个(否则与javax.vecmath有什么关系)? – dsg 2011-01-23 12:13:54
其实,我猜java确实支持这个:http://stackoverflow.com/questions/2382915/what-does-this-java-generics-paradigm-do-and-what-is-it-cal-叫 – dsg 2011-01-23 12:56:00