java - Java 中的通用 vector

标签 java arrays generics

为什么这里的add()方法不能编译?

Vector<?> vectorList[] = new Vector<?>[10];
vectorList[0].add("elem1");

谢谢

最佳答案

您的代码存在几个问题。首先,数组的元素未初始化,因此您要添加到一个不存在的 vector 中。其次,添加到类型为通配符的通用容器没有意义,因为它可能被限制为更有限的类型,因此添加并不安全。

您可以通过填充数组来解决第一个问题:

for (int i = 0; i < 10; i++ ){
    vectorList[i] = new Vector<Integer>(); // can replace Integer with
                                           // any binding for ? 
}

既然您已经看到它可以用不接受 String 类型的 vector 填充,您就可以明白为什么 add 语句随后会失败。您可以通过提前绑定(bind)到特定类型(例如字符串)来解决这个问题。

参见Java Generics: Wildcards请参阅 Java 教程以获取更多信息。

编辑
看来我很怀疑,所以我有以下完整的、可编译的示例:

import java.util.*;

public class Main
{
    public static void main(String[] args){
        Vector<?> vectorList[] = new Vector<?>[10];
        for (int i = 0; i < 10; i++ ){
            vectorList[i] = new Vector<Integer>();
        }
        System.out.println("Hello world");
    }
}

使用 javac Main.java 进行编译不会出现编译错误。

关于java - Java 中的通用 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2521801/

相关文章:

javascript 将变量组合成数组

java - 没有覆盖 hashCode() 和 equals() 的对象上的 LinkedHashSet

generics - 无法将特征边界添加到结构成员

java - 为什么我收到错误 : Incompatible types; JButton cannot be converted to a JTextfield

java - 是否可以以这种方式使用 boolean 表达式?

java - 每次读取一行/仅读取特定列并创建对象

c++ - 如何在C++中声明数组字符串

java - Clojure Java Interop - 对字段的引用...无法解析

Javascript(子)对象通过键数组访问

java - 为什么 Java 泛型不能实现接口(interface)?