मैं इस Why does a generic cast of a List<? extends Set..> to List<Set..> succeed on Sun JDK 6 but fail to compile on Oracle JDK 7?जेडीके 6 की तुलना में जेडीके 7 में अधिक अनुमानक टाइप करें?
से संबंधित हो सकती लगता है कि हम निम्नलिखित वर्गों लेते हैं, वे ठीक JDK 6 के तहत संकलन:
:public final class Foo<V> {
private final V value;
private Foo(final V value) {
this.value = value;
}
public static <T, R extends T> Foo<T> of(final R value) {
return new Foo<T>(value);
}
}
final class Tester {
@Test(groups="unit")
public static void test() {
bar(Foo.of(BigDecimal.ZERO)); // This line fails in JDK 7 but not JDK 6
}
private static void bar(final Foo<? extends Number> target) {
assert target != null;
}
}
हालांकि, JDK 7 के तहत, मैं निम्न त्रुटि प्राप्त
[ERROR] \work\fsb-core\src\test\java\com\fsb\core\Foo.java:[42,8] error:
method bar in class Tester cannot be applied to given types;
मैंने सोचा था कि जेडीके 7 में टाइप अनुमान कम प्रतिबंधक था (उदाहरण के लिए, कन्स्ट्रक्टर अनुमान जोड़ना)। हालांकि, कंपाइलर जेडीके 6 के तहत मान्य एक प्रकार को अस्वीकार कर रहा है।
क्या यह एक बग है? या तरीकों के लिए अनुमान अधिक नियम बनाये गए थे?
जावा 8 (1.8.0_25) यह फिर से ठीक है। – Lii