英文:
When do we use Stack<Integer> st = new Stack<Integer>(); and when to use Stack st = new Stack();?
问题
在Java中,何时使用
Stack<Integer> st = new Stack<Integer>();
以及何时使用
Stack st = new Stack();
对于Stack st = new Stack()
,我将不得不创建自己的Stack
类,除此之外它们之间还有其他特定的区别吗?
英文:
In Java, when to use
Stack<Integer> st = new Stack<Integer>();
and when to use
Stack st = new Stack();
For Stack st = new Stack()
, I will have to create my own class Stack
, other than this is there any other specific differences between them?
答案1
得分: 2
> 什么时候使用 Stack st = new Stack();
?
从不。这种风格早于 Java 中的泛型存在。它完全被泛型用法取代,即 Stack<Integer>
。有时候你需要使用延迟绑定,并且不知道堆栈内将存储哪种类型。但即使在这种情况下,你也应该使用通配符,比如 Stack<?>
。
现代集成开发环境(IDE)会在你使用没有指定泛型参数的泛型类时发出警告。
> 我将不得不创建我自己的类 Stack
你不需要这样做,你可以将泛型的 Stack
类(即 java.util.Stack<T>
)以非泛型方式使用。Java 允许这样做(对于任何泛型类,不仅仅是 Stack
)。但这是不鼓励的,参见上文。
英文:
> when to use Stack st = new Stack();
?
Never. That style predates the existence of generics in Java. It’s completely replaced by generic usage, i.e. Stack<Integer>
. Sometimes you need to use late binding and don’t know which type will be stored inside the stack. But even then you’re supposed to use wildcards, i.e. something like Stack<?>
.
A modern IDE will warn you if you use a generic class without specifying generic parameters.
> I will have to create my own class Stack
You don’t, you could use the generic Stack
class (that is, java.util.Stack<T>
) non-generically. Java allows that (for any generic class, not just for Stack
). But it’s discouraged, see above.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论