未经检查的调用push(E)作为原始类型Stack的成员

时间:2016-06-03 00:53:44

标签: java vector stack

首先,这段代码运行正常。但是,我已经看到了关于未经检查的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);
}

}

我错过了什么?

2 个答案:

答案 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...