Quiero tener un vector general de clase abstracta/rasgo que especifica ciertos métodos, por ejemplo:jerarquía de clases correcto para 2D y 3D vectores de
trait Vec
{
def +(v:Vec):Vec
def *(d:Double):Vec
def dot(v:Vec):Double
def norm:Double
}
quiero tener Vec2D
y Vec3D
extienden Vec
:
class Vec2D extends Vec { /* implementation */ }
class Vec3D extends Vec { /* implementation */ }
Pero, ¿cómo puedo, por ejemplo, hacer que Vec2D
solo se pueda agregar a otros Vec2D
y no a Vec3D
?
Ahora mismo estoy implementando Vec2D
y Vec3D
sin un antecesor común Vec
, pero esto se está volviendo tedioso con código duplicado. Tengo que implementar todas mis clases de geometría que dependen de estas clases (por ejemplo, Triangle
, Polygon
, Mesh
, ...) dos veces, una para Vec2D
y otra vez para Vec3D
.
Veo las implementaciones de java: javax.vecmath.Vector2d
y javax.vecmath.Vector3d
no tienen un antecesor en común. ¿Cuál es el motivo de esto? ¿Hay alguna manera de superarlo en Scala?
el clavo. La sintaxis es correcta y todo! Supongo que Java no es compatible con esto (de lo contrario, ¿cuál es el problema con 'javax.vecmath')? – dsg
En realidad, supongo que java admite esto: http://stackoverflow.com/questions/2382915/what-does-this-java-generics-paradigm-do-and-what-is-it-called – dsg