我看到了一段代码:
public abstract List<Class<? extends Pet>> types();
(之前显示Class Dog和Cat继承自Class Pet) 问号是什么?在这里意味着什么?
答案 0 :(得分:3)
这称为通配符,在定义泛型类型时很有用。从documentation:
看一下这个例子Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error
由于我们不知道c的元素类型代表什么,我们无法向其添加对象。 add()方法接受类型为E的参数,即集合的元素类型。当实际类型参数为?时,它代表某种未知类型。我们传递给add的任何参数都必须是这种未知类型的子类型。由于我们不知道它是什么类型,因此我们无法传递任何内容。唯一的例外是null,它是每种类型的成员。
同样来自伟大的Java Generics FAQ:
通配符描述了一系列类型。有3种不同风格的通配符:
通配符用于声明所谓的通配符参数化类型,其中通配符用作通用类型实例化的参数。在不需要或仅需要部分了解参数化类型的类型参数的情况下,通配符非常有用。
答案 1 :(得分:0)
?是一张外卡暗示&#34;任何东西&#34;。在您的示例中,它表示扩展Pet的所有类的列表。可能是狗或猫或任何宠物的动物