在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
”。