我不能完全让我的通用类在Java中工作

时间:2018-12-05 02:19:46

标签: java

我执行以下包含三个方法的执行。 plus将字符串添加到类中,minus将其删除,并且empty检查并在没有存储更多字符串的情况下返回true。

private static void test() {
    Stack<String> stack = new Stack<String>();
    stack.plus("hello1");
    stack.plus("hello2");
    stack.plus("hello3");
    stack.plus("hello4");

    while (!stack.empty()) {
        System.out.println(stack.minus());
    }

    stack.plus("a1");
    stack.plus("a2");
    stack.plus("a3");
    stack.plus("a4");
    stack.minus();
    stack.minus();
    stack.plus("a5");
    stack.plus("a6");

    while (!stack.empty()) {
        System.out.println(stack.minus());
    }
}

@SuppressWarnings("hiding")
public class Stack<String> {

    private String e;

    public void plus(String e) {
        this.e= e;
    }

    public String minus() {
        return e;   
    }

    public boolean empty() {
        if(e != null) {
        }return false;
    }
}

输出应为:

  

hello4

     

hello3

     

hello2

     

hello1

     

a6

     

a5

     

a2

     

a1

此刻,我的程序一直在“ hello4”处无限循环,我还不太清楚如何解决empty函数。我怀疑该方法是我的主要问题。

1 个答案:

答案 0 :(得分:4)

您似乎误解了泛型的语法。在您的Stack类中,通用参数String的行为更像是变量,而不像String类。

//DataType is substituted for whatever you tell it in <...> when making a Stack object
public class Stack<DataType> { 

    private List<DataType> memory = new ArrayList<>();

    public void push(DataType e) {
        memory.add(e);
    }

    public DataType pop() {
        if(memory.isEmpty())
           return null;
        int lastIndex = memory.size()-1;
        DataType element = memory.get(lastIndex); //get last element of memory
        memory.remove(lastIndex); //remove it from the stack
        return element; //return it   
    }

    public boolean isEmpty() {
        return memory.isEmpty();
    }
}

您可以像现在一样使用它:

Stack<String> stack = new Stack<String>(); //DataType in Stack becomes String