当用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>();
}
}
Run Code Online (Sandbox Code Playgroud)
编译时得到的错误是:
test/TestClass.java:11: incompatible types
found : test.TestClass.E<test.TestClass.D<test.TestClass.A>>
required: test.TestClass.E<test.TestClass.D<? extends test.TestClass.C>>
E<D<? extends C>> a = new E<D<A>>();
^
test/TestClass.java:12: incompatible types
found : test.TestClass.E<test.TestClass.D<? extends test.TestClass.C>>
required: test.TestClass.E<test.TestClass.D<? extends java.lang.Object>>
E<D<? extends Object>> b = new E<D<? extends C>>();
^
test/TestClass.java:13: incompatible types
found : test.TestClass.E<test.TestClass.D<test.TestClass.A>>
required: test.TestClass.E<test.TestClass.D<? extends test.TestClass.A>>
E<D<? extends A>> c = new E<D<A>>();
^
test/TestClass.java:14: incompatible types
found : test.TestClass.E<test.TestClass.D<test.TestClass.A>>
required: test.TestClass.E<test.TestClass.D<? super test.TestClass.A>>
E<D<? super A>> d = new E<D<A>>();
^
4 errors
如果E<D<? extends C>>找到了,那肯定会匹配E<D<? extends Object>>,对吧?还是我错过了什么?