带堆栈的通用方法

时间:2018-12-30 09:43:40

标签: java generics stack

我的代码:

    public static void spilledOn (Stack<Object> st1,Stack<Object> st2){
    while (!st2.isEmpty()){
            st1.push(st2.pop());
    }    
}

public static int findLengthInStack (Stack<Object> st1){
    Stack<Object> tmp=new Stack<>();
    int count=0;
    while (tmp.isEmpty()){
        tmp.push(st1.pop());
        count++;
    }
    toolsForAnything.spilledOn(st1, tmp);
    return count;
}

当我调用此方法并且使用另一种类型的堆栈时,它无法正常工作 (我是说我使用Stack<Integer>
有人对此有任何解决方案吗?
(我希望它可以与对象一起使用)

2 个答案:

答案 0 :(得分:0)

如果您想编写(不必要的)方法来查找堆栈中有多少个元素,可以这样做:

public class Helper {

    private static <T> int findSize(Stack<T> input) {
        return input.size();
    }

    public static void main(String[] args) {

        Stack<Integer> stack = new Stack<>();
        stack.push(4);
        stack.push(9);

        System.out.println(findSize(stack));

    }
}

为什么我说不必要?因为您可以简单地写:

System.out.println(stack.size());

代替:

System.out.println(findSize(stack));

答案 1 :(得分:0)

如果出于某种原因确实要使用此算法,则对于一般的Stack,您需要为每个方法声明一个类型参数。

// (Really an API would be using super and extends here,
//   but let's keep it simple.)
public static <T> void spilledOn (Stack<T> st1,Stack<T> st2){
    //        ^^^                       ^            ^
[...]
// (I'm using a different name (E vs T) here
//     just to illustrate that I am declaring two variables.
//   Using the same letter would be more conventional.)
public static <E> int findLengthInStack (Stack<E> st1){
    //        ^^^                              ^
    Stack<E> tmp=new Stack<>();
    //    ^