मुझे इसी तरह के विषय मिल गए हैं, लेकिन अत्यधिक जटिल और काफी समान नहीं हैं। तो बात यह है। यहां (न्यूनतम) कोड है जो 1.6 पर ठीक है, लेकिन 1.7 javac के साथ संकलित नहीं है।जेडीके 1.7 पिछड़ा संगतता तोड़ता है? (जेनेरिक)
public class Test {
private static class A<T>{};
private static class B{};
private static class C{};
B doSomething(A<B> arg){
return new B();
}
C doSomething(A<C> arg){
return new C();
}
}
1,7 त्रुटि पर यह है:
java: name clash: doSomething(Test.A<Test.C>) and doSomething(Test.A<Test.B>) have the same erasure
मैं प्रकार विलोपन को समझते हैं और यही कारण है कि यह एक गलत कोड है। मुझे समझ में नहीं आ रहा है कि क्यों हम इस परियोजना को हमारे प्रोजेक्ट संकलन और 1.6 में चल रहे हैं, जब 1.7 में समस्याएं हैं। गलत क्या है? क्या यह 1.6 कंपाइलर में एक बग है कि यह हमें ऐसा करने की अनुमति देता है? क्या इसे पुनः लिखने के अलावा 1.7 में काम करना संभव है?
- JDK1.6 javac संस्करण: 1.6.0_43
- JDK1.7 javac संस्करण: 1.7.0_25
स्पष्टीकरण के लिए धन्यवाद । लेकिन मुझे अभी भी यह पसंद नहीं है कि उन्होंने पीछे की संगतता तोड़ दी। – NeplatnyUdaj
@NeplatnyUdaj: एक बग फिक्सिंग पिछड़ा संगतता तोड़ नहीं रहा है। – newacct
@ न्यूवाक्ट: मुझे लगता है कि यह है, क्योंकि बहुत से कोड इस पर निर्भर हो सकते हैं। क्या आप एक डेवलपर को जानते हैं जो पूरे जेएलएस को पढ़ता है? – NeplatnyUdaj