我写了以下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
在审核this answer后,我将声明从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;
^
谢谢。
答案 0 :(得分:9)
您看到的关于“未经检查或不安全的操作”的警告是因为Vector
是参数化类型。它实际上是Vector<E>
,您应该在使用Vector
时提供类型参数。如果您使用“原始”Vector
,那么您将无法获得Java的泛型框架的任何优势。 “不安全”警告意味着您错过了某种类型的安全性。
存在“过时类型”警告,因为Vector
已被(基本上)弃用,以支持List
及其实现(ArrayList
和LinkedList
等)
各种List
类型是Vector
的通用替代品。 ArrayList
可以用作Vector
的或多或少的替代品,但您应该注意一些差异。阅读javadocs以获取更多信息。
最重要的区别是Vector
是线程安全的,但ArrayList
和LinkedList
不是。如果您依赖于Vector
的内置线程安全性,那么您应该查看Collections.synchronizedList
方法。
Vector
。尽管如此,通用类型警告仍然适用。
如果您愿意,可以忽略警告。他们在那里告诉你,如果你不小心可能有问题,但如果你 小心那么你会没事的。
答案 1 :(得分:0)
不安全的警告与Vector无关。只是代码没有指定Vector应包含的内容。通常,您希望使用ArrayLists而不是Vectors,并且您可能还想指定容器中的类型。
Enumeration接口也已过期。你应该更喜欢迭代器。事实上,有一些语言功能可以利用它们。例如循环的“新”。
注意:我假设J2ME支持这些功能。如果没有,那么“旧方式”就没有错。他们只是不是最佳的。
e.g。 (不适用于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中不起作用,J2ME是1.3的子集。显然,甚至不支持ArrayList。所以问题示例中的原始代码看起来就像是要走的路。