简体   繁体   English

列表中限制的Java通用通配符

[英]Java generic wildcard bounded in lists

I am trying to understand Java Generics and I'm puzzled by the bounded wildcards. 我试图理解Java泛型,但对有限的通配符感到困惑。 I'm using the hierarchy from the Guidelines for Wildcard Use and have added a class PositiveEvenNumber inheriting from EvenNumber. 我使用的是通配符使用准则中的层次结构,并添加了一个从EvenNumber继承的PositiveEvenNumber类。

    List<? super EvenNumber> xn = new ArrayList<NaturalNumber>();
    xn.add(new NaturalNumber(35));  // compile-time error
    xn.add(new EvenNumber(-70));
    xn.add(new PositiveEvenNumber(70));
    xn.add(new Object());  // compile-time error

Why does the first line compile ? 为什么第一行会编译? On second line, isn't NaturalNumber a parent of EvenNumber, why can't it be added ? 在第二行上,NaturalNumber不是EvenNumber的父级,为什么不能添加它?

Thanks! 谢谢!

A List<? super EvenNumber> List<? super EvenNumber> List<? super EvenNumber> is a list of some specific type, provided that that type is a supertype of EvenNumber . List<? super EvenNumber>是某些特定类型的列表,但前提是该类型是EvenNumber的超类型。

Therefore, it might be a List<EvenNumber> , in which case you can't add a NaturalNumber . 因此,它可能是List<EvenNumber> ,在这种情况下,您不能添加NaturalNumber

This also means that you can't read anything from the list (except as Object ), since you don't know what type the list actually contains. 这也意味着您无法从列表中读取任何内容( Object除外),因为您不知道列表实际包含的类型。 (it could even be a List<Object> ) (它甚至可以是List<Object>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM