Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java中的泛型类型未知?_Java_Generics - Fatal编程技术网

为什么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&

这是来自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<?> 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);
    }
}