[英]Is it safe to use Vector in java?
我寫了以下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 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;
^
謝謝。
您看到的關於“未檢查或不安全操作”的警告是因為Vector
是參數化類型。 它實際上是Vector<E>
,你應該在使用Vector
時提供一個類型參數。 如果您使用“原始” Vector
那么您將無法獲得Java的泛型框架的任何優勢。 “不安全”警告意味着您錯過了某種類型的安全性。
“過時類型”警告就在那里,因為Vector
已經(基本上)不贊成使用List
及其實現( ArrayList
和LinkedList
等)。
各種List
類型是Vector
的通用替換。 ArrayList
可以用作Vector
的一個或多或少的替代品,但是你應該注意一些差異。 閱讀javadocs以獲取更多信息。
最重要的區別是Vector
是線程安全的,但ArrayList
和LinkedList
不是。 如果您依賴於Vector
的內置線程安全性,那么您應該查看Collections.synchronizedList
方法。
編輯:哦,你正在使用JavaME。 在這種情況下,你可能會遇到Vector
。 然而,通用類型警告仍然適用。
如果您願意,可以忽略警告。 他們有沒有告訴你,如果你不小心有可能是一個問題,但如果你細心,你會沒事的。
不安全警告與Vector無關。 只是代碼沒有指定Vector應包含的內容。 通常,您希望使用ArrayLists而不是Vectors,並且您可能還想指定將在容器中的類型。
Enumeration接口也已過時。 你應該更喜歡迭代器。 事實上,有一些語言功能可以利用它們。 例如循環的“新”。
注意:我假設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中不起作用,J2ME是1.3的子集。 顯然,甚至不支持ArrayList。 所以問題示例中的原始代碼看起來就像是要走的路。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.