Khi thực hiện một số điều không thực sự ưa thích với Java, tôi đã gặp một lỗi với generics mà tôi không thể hiểu tại sao nó không hoạt động. Mã này là:Lỗi trình biên dịch Java Generics
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>();
}
}
Các lỗi tôi nhận được khi biên dịch là:
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
Nếu E<D<? extends C>>
được tìm thấy, mà chắc chắn phải phù hợp với E<D<? extends Object>>
, phải không? Hay tôi đã bỏ lỡ điều gì đó?
đây là một câu hỏi hay cho phiên bản tiếp theo của Java Puzzlers http://www.javapuzzlers.com/ – dfa
Tôi tin rằng bạn đã tình cờ gặp một trường hợp cạnh. Rất thú vị. –
Điều này có thể được sử dụng nếu bạn có thể hiểu được: http://bit.ly/3RrNV3 – teabot