Podczas wykonywania niezbyt ciekawych rzeczy w Javie, natknąłem się na błąd generyczny, który nie był w stanie zrozumieć, dlaczego to nie działa. Kod jest:Błąd kompilatora generycznego Java
package test;
import java.util.*;
public class TestClass {
public static class A extends C{}
public static class B extends C{}
public static class C{}
public static class D<T>{}
public static class E<T>{}
public static void main(String args[]){
E<D<? extends C>> a = new E<D<A>>();
E<D<? extends Object>> b = new E<D<? extends C>>();
E<D<? extends A>> c = new E<D<A>>();
E<D<? super A>> d = new E<D<A>>();
D<? extends C> e = new D<A>();
D<? extends A> f = new D<A>();
D<? extends A> g = new D<A>();
}
}
Błąd pojawia się podczas kompilacji:
test/TestClass.java:11: incompatible types found : test.TestClass.E> required: test.TestClass.E> E> a = new E>(); ^ test/TestClass.java:12: incompatible types found : test.TestClass.E> required: test.TestClass.E> E> b = new E>(); ^ test/TestClass.java:13: incompatible types found : test.TestClass.E> required: test.TestClass.E> E> c = new E>(); ^ test/TestClass.java:14: incompatible types found : test.TestClass.E> required: test.TestClass.E> E> d = new E>(); ^ 4 errors
Jeśli E<D<? extends C>>
zostanie znaleziony, które powinny na pewno pasuje E<D<? extends Object>>
, prawda? A może coś przeoczyłem?
to jest dobre pytanie dla kolejnej edycji Javy Puzzlers http://www.javapuzzlers.com/ – dfa
Sądzę, że natknąłeś się na przypadek skrajny. Bardzo interesujące. –
Może to być przydatne, jeśli możesz to zrozumieć: http://bit.ly/3RrNV3 – teabot