首先,这段代码运行正常。但是,我已经看到了关于未经检查的push(E)调用的问题,因为到目前为止,堆栈溢出的原始类型已经很多次了,并且常见的解决方案是将我的堆栈声明为如此
Stack<Integer> myStack = new Stack<Integer>();
但我这样做仍然遇到同样的问题。这是一个显示正在发生的事情的小例子,但我似乎无法摆脱错误:
import java.util.*;
public class Main{
static void myPush (Stack myStack, int b){
myStack.push(new Integer(b));
System.out.println("inserted element is: " + b);
System.out.println("this is on the stack: " + myStack);
}
public static void main(String args[]) {
Stack<Integer> myStack = new Stack<Integer>();
myPush(myStack, 10);
myPush(myStack, 12);
myPush(myStack, 13);
}
}
我错过了什么?
答案 0 :(得分:6)
您在方法声明中使用原始类型。变化,
static void myPush (Stack myStack, int b)
到
static void myPush (Stack<Integer> myStack, int b)
或者,使该方法在类型 T
上通用,如
static <T> void myPush(Stack<T> myStack, T b) {
myStack.push(b);
System.out.println("inserted element is: " + b);
System.out.println("this is on the stack: " + myStack);
}
最后, Java 7引入了可用于更改的diamond operator <>
Stack<Integer> myStack = new Stack<Integer>();
到
Stack<Integer> myStack = new Stack<>();
答案 1 :(得分:1)
您的代码运行完美。关于是否存在警告(这是我假设您担心的),这是因为您再次声明原始类型作为参数。 myStack
实际上应该声明为
...Stack<Integer> myStack...