मैं एक सामान्य वेक्टर सार वर्ग/विशेषता है कि कुछ तरीकों को निर्दिष्ट करता है, उदाहरण के लिए करना चाहते हैं:उचित वर्ग पदानुक्रम वैक्टर
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
पर नहीं जोड़ा जा सके?
अभी मैं सिर्फ एक आम Vec
पूर्वज के बिना Vec2D
और Vec3D
को लागू कर रहा हूँ, लेकिन यह डुप्लिकेट कोड के साथ कठिन हो रही है। मैं अपने सभी ज्यामिति वर्गों है कि इन कक्षाओं पर निर्भर करते हैं लागू करने के लिए (जैसे कि Triangle
, Polygon
, Mesh
, ...) दो बार, Vec2D
के लिए एक बार और फिर Vec3D
के लिए।
मुझे जावा कार्यान्वयन दिखाई देता है: javax.vecmath.Vector2d
और javax.vecmath.Vector3d
कोई आम पूर्वज नहीं है। इसके लिए क्या कारण है? क्या स्कैला में इसे दूर करने का कोई तरीका है?
स्पॉट पर। सिंटेक्स सही है और सबकुछ! मुझे लगता है कि जावा इसका समर्थन नहीं करता है (अन्यथा 'javax.vecmath' के साथ सौदा क्या है)? – dsg
दरअसल, मुझे लगता है कि जावा इसका समर्थन करता है: http://stackoverflow.com/questions/2382915/what-does-this-java-generics-paradigm-do-and-what-is-it-called – dsg