मैं स्केला में निम्न पदानुक्रम के साथ समस्या है:स्केला जेनरिक और विरासत
class ScalaGenericTest {
def getValue[A, B <: Abstract[A]](clazz: B): A = clazz.a
def call: String = {
val sub: Subclass = new Subclass
getValue(sub)
}
}
class Subclass extends Abstract[String] {
def a: String = "STRING"
}
abstract class Abstract[A] {
def a: A
}
संकलक getValue कार्य करने के लिए कॉल में जेनेरिक पैरामीटर एक बाध्य करने के लिए सक्षम होने के लिए प्रतीत नहीं होता है - मैं लगता है कि यह सबक्लास की परिभाषा से इसका अनुमान लगाने में सक्षम होना चाहिए।
अनुमानित प्रकार तर्क [कुछ भी नहीं है, उपवर्ग] विधि getValue के प्रकार पैरामीटर सीमा के अनुरूप नहीं है [ए, बी <: सार [एक]]
यह अगर काम करता है संकलन त्रुटि इस प्रकार है मैं स्पष्ट रूप से विधि के लिए जेनेरिक प्रकार तर्कों को पास करता हूं, यानी getValue[String,Subclass](sub)
लेकिन निश्चित रूप से संकलक इसे अनुमान लगाने में सक्षम होना चाहिए?
ही पदानुक्रम जावा में ठीक काम करता है:
public class JavaGenericTest {
public <T,U extends Abstract<T>> T getValue(U subclass) {
return subclass.getT();
}
public String call(){
Subclass sub = new Subclass();
return getValue(sub);
}
private static class Subclass extends Abstract<String> {
String getT(){
return "STRING";
}
}
private static abstract class Abstract<T> {
abstract T getT();
}
}
मैं स्काला के सुंदर नया हूँ वहाँ शायद कुछ सूक्ष्मता है कि मैं याद कर रहा हूँ, इसलिए।
किसी भी मदद के लिए अग्रिम धन्यवाद!
तुम भी 'बी <% सार [एक]' साथ सामान्य पैरामीटर पर एक अंतर्निहित दृश्य का उपयोग कर सकते हैं। मुझे लगता है कि इसे बहिष्कृत किया जा सकता है, लेकिन यह अंतर्निहित तर्क तर्क प्रकार अनुमान के लिए पर्याप्त सबूत है। –
ग्रेट उत्तर। मैंने निहित तर्क दृष्टिकोण पर विचार किया लेकिन मूल कारण नहीं था कि एक अच्छा कारण नहीं देख सका। <% का उपयोग करके सीमाएं देखें निश्चित रूप से बहिष्कृत की गई है। – paulyb