3

我写了以下java代码:

public static void main(String[] args) {
    Vector vector = new Vector();
    for(int i=1; i<=10; i++)
        vector.addElement(i);

    Enumeration vEnum = vector.elements();
    while(vEnum.hasMoreElements())
        System.out.println(vEnum.nextElement());
}

编译时收到以下警告消息:

Note: TestJavaApplication.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

和 Netbeans 抱怨“过时的集合”的消息。

在这种情况下,您有什么建议?

请注意,我需要在 J2ME 应用程序中使用 Vector 作为存储元素顺序的动态数组。我会很高兴使用 Hashtable 但不幸的是它不存储其元素的顺序。

编辑 1 在查看此答案后,我将声明从更改Vector vector = new Vector();Vector<String> vector = new Vector<String>();. 现在收到另一条警告消息:

TestJavaApplication.java:2: warning: com.sun.org.apache.xerces.internal.parsers.IntegratedParserConfiguration is Sun proprietary API and may be removed in a future release
import com.sun.org.apache.xerces.internal.parsers.IntegratedParserConfiguration;
                                                 ^

谢谢你。

4

2 回答 2

9

您看到的有关“未经检查或不安全的操作”的警告是因为Vector是参数化类型。它实际上是Vector<E>,并且您应该在使用时提供类型参数Vector。如果您使用“原始” Vector,那么您将无法获得 Java 泛型框架的任何优势。“不安全”警告意味着您错过了某种类型的安全性。

存在“过时类型”警告是因为Vector(基本上)已弃用,而支持List其实现(ArrayList以及 和LinkedList等)。

各种类型ListVector. ArrayList可以用作或多或少的替代替代品Vector,但您应该注意一些差异。阅读 javadocs 以获取更多信息。

最重要的区别是它Vector是线程安全的,但ArrayList不是LinkedList。如果您依赖Vectors 内置的线程安全性,那么您应该看一下该Collections.synchronizedList方法。

编辑:哦,你正在使用 JavaME。在这种情况下,您可能会陷入困境Vector。尽管如此,通用类型警告仍然适用。

如果您愿意,可以忽略这些警告。他们在那里告诉你,如果你不小心,可能会有问题,但如果你小心,那么你会没事的。

于 2012-11-28T05:21:58.967 回答
0

不安全警告与 Vector 无关。只是代码没有指定 Vector 应该包含的内容。通常,您希望使用 ArrayLists 而不是 Vectors,并且您可能还希望指定将进入容器的类型。

Enumeration 接口也已过时。您应该更喜欢迭代器。事实上,有一些语言特性可以利用它们。例如“新” for 循环。

注意:我假设 J2ME 支持这些特性。如果没有,那么“旧方法”就没有错。它们只是不是最佳的。

例如(不适用于 J2ME,但适用于 Java 5 或更高版本)

public static void main(String[] args) {
    ArrayList<Integer> vector = new ArrayList<Integer>();
    for(int i=1; i<=10; i++)
        vector.addElement(i);

    for(Integer i : vector)
        System.out.println(i);
}

根据 gnat 的评论,上面的代码在 J2ME 中不起作用,它是 1.3 的子集。显然,甚至不支持 ArrayList。因此,问题示例中的原始代码看起来像是要走的路。

于 2012-11-28T05:23:28.367 回答