这是从斯坦福分析器附带的一些示例中获取的一小段代码.我已经用Java开发了大约4年,但是从来没有对这种代码风格应该表明什么有非常强烈的理解.
List<? extends HasWord> wordList = toke.tokenize();
Run Code Online (Sandbox Code Playgroud)
我并不担心代码的细节.令我困惑的是,通用表达式应该用英语表达的是什么.
谁可以给我解释一下这个?
什么List<?>意思,它只是意味着一个未指定类型的对象列表?
谷歌搜索字符串<?>返回没有任何用处(:
鉴于AGenericClass如下:
public class AGenericClass<T> {
T subject;
public void setSubject(T subject) {
this.subject = subject;
}
}
Run Code Online (Sandbox Code Playgroud)
变量a,b和c之间有什么区别?
AGenericClass<String> a = new AGenericClass<>();
AGenericClass<?> b = new AGenericClass<String>();
AGenericClass c = new AGenericClass<String>();
a.setSubject("L"); // OK.
b.setSubject("M"); // Error: setSubject(capture<?>) cannot be
// applied to (java.lang.String)
c.setSubject("N"); // Warning: Unchecked call to 'setSubject(T)'
// as a member of raw type 'AGenericClass'
Run Code Online (Sandbox Code Playgroud)
a b和c all都是在没有IDE控制的情况下声明的,但是在setSubject调用时它们的行为都不同.
有时候我会看到看起来像的java代码
Class<?>
Run Code Online (Sandbox Code Playgroud)
我不明白它的正确含义.
如果我看到类似的东西:
ComboBox<Order> box = new ComboBox<>();
Run Code Online (Sandbox Code Playgroud)
然后它明确表示该框只能包含类订单中的对象,但是呢<?>?是等于还是完全不同?