2014-01-16 23 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<>(); 
相关问题