मैं यह पता लगाने की एक स्काला सार प्रकार के लिए एक निर्माता को लागू करने की कोशिश कर रहा हूँ कैसे:मैं स्कैला अमूर्त प्रकार के निर्माता को कैसे बुला सकता हूं?
class Journey(val length: Int)
class PlaneJourney(length: Int) extends Journey(length)
class BoatJourney(length: Int) extends Journey(length)
class Port[J <: Journey] {
def startJourney: J = {
new J(23) // error: class type required but J found
}
}
यह और भी संभव है? मैं Scala manifests से परिचित हूं लेकिन मुझे स्पष्ट नहीं है कि वे यहां कैसे मदद कर सकते हैं। इसी तरह मैं समझ नहीं कैसे एक साथी के साथ भी ऐसा ही करने पर आपत्ति की लागू() निर्माता:
object Journey { def apply() = new Journey(0) }
object PlaneJourney { def apply() = new PlaneJourney(0) }
object BoatJourney { def apply() = new BoatJourney(0) }
class Port[J <: Journey] {
def startJourney: J = {
J() // error: not found: value J
}
}
किसी भी विचारों कृतज्ञता प्राप्त!
धन्यवाद मोरित्ज़ - लेकिन आरईपीएल में आपके कोड को चिपकाने से कुछ त्रुटियां फेंकता है? मैं डिफ़ॉल्ट "कन्स्ट्रक्टर" में पैरामीटर कैसे जोड़ूं? –
आपको इस कोड के लिए आरईपीएल में काम करने के लिए पेस्ट मोड दर्ज करना होगा (पेस्ट करने से पहले बस 'पेस्ट' टाइप करें)। फिलिप द्वारा तय किए गए कोड में भी एक त्रुटि हुई थी। – Moritz
यदि आप पैरामीटर जोड़ना चाहते हैं तो आप 'डिफ़ॉल्ट' विशेषता में बस एक नई विधि जोड़ सकते हैं। 'निस्संदेह [डिफ़ॉल्ट [जे]] 'आपको आपूर्ति प्रकार के पैरामीटर के साथ विशेषता का एक उदाहरण देगा और आप जिस पर चाहें उसे किसी भी विधि का आह्वान कर सकते हैं, उदा। 'परोक्ष [डिफ़ॉल्ट [जम्मू]]। (23) बनाने के'। उदाहरण के लिए देखें [यह प्रश्न] (http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits) अंतर्निहित कार्यों के विवरण के विवरण के लिए देखें। – Moritz