为什么Java中的泛型类型未知?
这是来自ANLTR示例的Java代码为什么Java中的泛型类型未知?,java,generics,Java,Generics,这是来自ANLTR示例的Java代码 public class SimpleLexer implements TokenSource { public static final int ID = 1; // Token.MIN_USER_TOKEN_TYPE; public static final int INT = 2; public static final int SEMI = 3; CharStream input; TokenFactory&
public class SimpleLexer implements TokenSource {
public static final int ID = 1; // Token.MIN_USER_TOKEN_TYPE;
public static final int INT = 2;
public static final int SEMI = 3;
CharStream input;
TokenFactory<?> factory = CommonTokenFactory.DEFAULT;
public类SimpleLexer实现TokenSource{
public static final int ID=1;//Token.MIN\u USER\u Token\u TYPE;
公共静态最终int=2;
公共静态最终int半=3;
字符流输入;
TokenFactory=CommonTokenFactory.DEFAULT;
为什么在这种情况下使用未知类型?使用令牌工厂时有什么区别?下面是一段摘录,我认为它很好地回答了您的问题
考虑编写一个例程以打印出所有
集合中的元素。下面是如何在较旧的
语言版本(即5.0之前的版本):
void printCollection(集合c){
迭代器i=c.迭代器();
对于(k=0;k
下面是一个使用泛型(以及新的
对于循环语法):
void printCollection(集合c){
用于(对象e:c){
系统输出打印ln(e);
}
}
问题是这个新版本比旧版本有用得多
而旧代码可以用任何类型的集合调用
作为一个参数,新代码只接受Collection,即
我们刚刚演示了,不是所有类型的
收藏
那么什么是所有类型集合的超类型呢?它是由
集合(发音为“未知集合”),即
元素类型与任何内容匹配的集合。它称为通配符
出于明显的原因键入。我们可以写:
void printCollection(集合c){
用于(对象e:c){
系统输出打印ln(e);
}
}
现在,我们可以将其称为任何类型的集合
void printCollection(Collection c) {
Iterator i = c.iterator();
for (k = 0; k < c.size(); k++) {
System.out.println(i.next());
}
}
void printCollection(Collection<Object> c) {
for (Object e : c) {
System.out.println(e);
}
}
void printCollection(Collection<?> c) {
for (Object e : c) {
System.out.println(e);
}
}