Java通配符类型的下界和上限

时间:2020-01-01 23:29:00

标签: java generics wildcard

我环顾四周,到目前为止,还没有找到在Java中对同一通配符类型同时设置上下限的任何方法。我不确定是否有可能,并倾向于将它作为Java中通配符的当前限制。

下面是我要寻找的示例。

$(function () {
    $('#AcceptUserAgreement').click(
        onToggleRegisterUserDisabledClick
    );
});

public class A {} public class B extends A{} public class C extends B{} public class D extends C{} public static void main(String[] args) { List<A> a = Arrays.asList(new A()); List<B> b = Arrays.asList(new B()); List<C> c = Arrays.asList(new C()); List<D> d = Arrays.asList(new D()); extendsParam(a); // error as A is not assignable to B extendsParam(b); extendsParam(c); extendsParam(d); // 3 previous ok as they can produce B superParam(a); superParam(b); superParam(c); // 3 previous ok as they can consume C superParam(d); // error as C is not assignable to D extendsSuperParam(a); // error as A is not assignable to B extendsSuperParam(b); extendsSuperParam(c); // 2 previous ok as they can consume C and produce B extendsSuperParam(d); // error as C is not assignable to D } public static void extendsParam(List<? extends B> blist) { B b = blist.get(0); blist.add(new C()); // error } public static void superParam(List<? super C> clist) { B b = clist.get(0); // error clist.add(new C()); } public static void extendsSuperParam(List<???> bclist) { B b = bclist.get(0); // ok bclist.add(new C()); // ok } 类中查找通用类型信息,看起来它支持使用该信息定义类型。但是,我找不到用这种语言创建这种类型的方法。

是否缺少某些内容,或者是当前无法用Java语言描述的类型?

1 个答案:

答案 0 :(得分:2)

根据Oracle Docs,无法完成此操作:

注意:您可以为通配符指定一个上限,也可以指定一个下限,但是不能同时指定两者。

相关问题