在Java语法中,Class <? 扩展的东西>

Class<? extends Something>

这是我的解释,这是类模板,但类? 意味着类的名字是不确定的,它扩展了Something类。

如果我的解释有什么问题,请告诉我。

你几乎是对的。 基本上,Java没有模板的概念(C ++有)。 这就是所谓的generics。 而且这个定义了一个generics类Class<> ,generics属性是Something任何子类。

如果你想得到模板和generics之间的区别,我build议阅读“ C ++和Java中的generics”types之间的区别是什么?

这里有一些令人困惑的答案,所以我会试着澄清这一点。 你可以这样定义一个generics:

 public class Foo<T> { private T t; public void setValue(T t) { this.t = t; } public T getValue() { return t; } } 

如果你想在Foo上使用generics来扩展类Bar,你可以这样声明:

 public class Foo<T extends Bar> { private T t; public void setValue(T t) { this.t = t; } public T getValue() { return t; } } 

这个? 在声明variables时使用。

 Foo<? extends Bar>foo = getFoo(); 

要么

 DoSomething(List<? extends Bar> listOfBarObjects) { //internals } 

你是对的

定义是类必须是Something的子types

这与Class<T> ,但是有一个条件, T必须extends Something或者implements Something Anthony Acciolybuild议的implements Something

它也可以是课堂本身

你是对的

然而,通常你会想要命名扩展了某些东西的类,例如<E extends Something> 。 如果你使用? 以后你不能用给定的types做任何事情。

你是对的

在Javagenerics中, 运营商是指“任何一类”。 可以使用extends关键字来限定“任何扩展/实现Something (或者Something )”的类。

因此,你有“某个阶级的阶级,但这个阶级必须或延伸/实施Something ”。