मैं बस कुछ ऐसा चला गया जो मुझे समझ में नहीं आया। दूसरा लूप कानूनी के नीचे क्यों नहीं है जब दूसरा समान रूप से एक है?जावा जेनरिक और रिटर्न प्रकार
public interface SomeInterface<T> {
List<SomeNamedObject> getObjects();
void doSomething(P1 p1, T p2);
}
public class SomeNamedObject {
private String text;
}
public class Clazz {
private SomeInterface someInterface;
...
public void someMethod() {
// Error Type mismatch: cannot convert from element type Object to TestClass.SomeNamedObject
for (SomeNamedObject someNamedObject : someInterface.getObjects()) {
// This loop won't compile as the someInterface.getObjects returns just a List and not a List<SomeNamedObject>
}
// Warning Type safety: The expression of type List needs unchecked
// conversion to conform to List<TestClass.SomeNamedObject>
List<SomeNamedObject> objects = someInterface.getObjects();
for (SomeNamedObject someNamedObject : objects) {
// This loop compiles
}
}
}
कोई बग नहीं, यह मिटाने और कच्चे प्रकार के साथ एक समस्या है। – Stefan
मुझे नहीं पता कि समस्या क्या हो सकती है। क्या आप वास्तविक स्टैक ट्रेस पोस्ट कर सकते हैं (केवल पहली कुछ पंक्तियां)। मुझे लगता है कि आपकी पूर्ण कक्षा को "कुछ इंटरफेस" की आवश्यकता है, लेकिन उदाहरण के लिए "" की आवश्यकता नहीं है, शायद वहां कुछ है? –
Jay
@Jay कुछ इंटरफेस की घोषणा ने सामान्य प्रकार निर्दिष्ट नहीं किया है, जावा फिर कच्चे प्रकार पर वापस आ जाता है और कच्चे सूची को वापस करने के लिए विधि हस्ताक्षर परिवर्तन (उत्तरों देखें)। उसे ऑब्जेक्ट असाइनमेंट पर चेतावनी का उल्लेख करना चाहिए था। – Stefan