2014-01-16 27 views
1

所以我想在這裏運行這個簡單的程序:堆棧 - 未檢查/不安全的操作

import java.util.*; 

class StackDemo 
{ 
    public static void main(String[] args) { 
     Stack s = new Stack(); 
     s.push(5); 
     s.push("dog"); 
     System.out.print(s); 
    } 
} 

StackDemo.java使用未經檢查或不安全的操作。 注意:請用-Xlint:unchecked重新編譯以獲取詳細信息。 過程完成。

它顯示預期的結果,這是"[5, dog]"但我不明白生成輸出窗口上的消息。 這裏可能有什麼錯誤?

+0

所以你要將整數和字符串類型放入堆棧? '5'和''dog''之間是否有任何關係? –

+0

考慮使用Deque而不是Stack。來自Javadoc:「Deque接口及其實現提供了更完整和一致的LIFO堆棧操作集,這些操作應優先於此類使用。」 – Puce

+1

您是否嘗試使用'-Xlint:unchecked'編譯以獲取更多詳細信息? –

回答

2

堆棧是遺留類,但警告是因爲您沒有使用泛型,編譯器無法檢查是否添加了正確的類型。

鑑於你已經混合了類型,在一個真正的程序中,我希望這是錯誤。

+0

上面的代碼不是一個真正的程序,只是一個示例,以更快地顯示我正在處理的內容,但感謝您的回答。 – user3026693

+0

Stack爲什麼是傳統類?我應該用什麼來代替? –

+0

棧在1998年大部分被ArrayList和LinkedList取代,但更好的選擇是在2006年添加ArrayDeque或ConcurrentLinkedDeque。 –

5

Stack是一個泛型類,如果您願意,您可以使用它來存儲特定類型的對象(例如,Stack<String>將用於存儲字符串)。使用裸類,沒有類型說明符通常被認爲是不好的做法,因爲您正在失去集合的類型安全性。

如果確實有一種用例,你想都5"dog"存儲在您的堆棧,你應該定義兩者之間的最大公約數你的籌碼 - Object

Stack<Object> s = new Stack<>(); 
相關問題