voglio avere un generale vettore classe astratta/caratteristica che specifica certi metodi, ad esempio:gerarchia delle classi corretta per la progettazione 2D e 3D vettori
trait Vec
{
def +(v:Vec):Vec
def *(d:Double):Vec
def dot(v:Vec):Double
def norm:Double
}
voglio avere Vec2D
e Vec3D
estendono Vec
:
class Vec2D extends Vec { /* implementation */ }
class Vec3D extends Vec { /* implementation */ }
Ma come posso, ad esempio, fare in modo che Vec2D
possa essere aggiunto solo ad altri Vec2D
e non a Vec3D
?
In questo momento mi sto solo attuazione Vec2D
e Vec3D
senza un comune antenato Vec
, ma questo sta diventando noiosa con il codice di duplicato. Devo implementare tutte le mie classi geometriche che dipendono da queste classi (ad esempio Triangle
, Polygon
, Mesh
, ...) due volte, una volta per Vec2D
e nuovamente per Vec3D
.
Vedo le implementazioni Java: javax.vecmath.Vector2d
e javax.vecmath.Vector3d
non hanno un antenato comune. Qual è la ragione di questo? C'è un modo per superarlo in scala?
Spot on. La sintassi è corretta e tutto! Suppongo che java non supporti questo (altrimenti qual è l'accordo con 'javax.vecmath')? – dsg
In realtà, suppongo che java supporti questo: http://stackoverflow.com/questions/2382915/what-does-this-java-generics-paradigm-do-and-what-is-it-called – dsg