我收到此错误:E无法转换为E.

时间:2015-11-04 04:49:20

标签: java

抱歉,我不确定如何清楚地表达我的问题。 我有一个堆栈,我想通过使用我的removeDuplicates()方法实现一个方法来删除类型E的对象的所有重复项。 该方法调用名为removeAll()的类中的另一个方法,该方法查找类型为E的所有对象,如果在堆栈中找到它们则将其删除。 我知道问题是编译器无法判断E类型的keepPile堆栈是否与原始堆栈中的E类型相同。 我再次为这种令人困惑的语言道歉。但是,任何人都可以帮我找到解决方案吗?

public class ArrayStack<E> implements Stack<E> { 
//push() adds object to stack
//pop() removes object from stack
...    
    public E peek() { //returns object without removing from stack
        if (isEmpty()) {
          throw new EmptyStackException();
        }
        @SuppressWarnings("unchecked")
        E result = (E) stack[size - 1];
        return result;
    }

    public void removeAll(E obj){
        ArrayStack<E> keepPile = new ArrayStack<>();
        ArrayStack<E> throwAwayPile = new ArrayStack<>();
        while(!this.isEmpty()){
            if(obj.equals(this.peek())){
                throwAwayPile.push(this.pop());
            }else{
                keepPile.push(this.pop());
            }
        }
        while(!keepPile.isEmpty()){
            this.push(keepPile.pop());
        }
    }

    public static <E> void removeDuplicates(Stack<E> stack){
        ArrayStack<E> keepPile = new ArrayStack<>();
        while(!stack.isEmpty()){
            keepPile.push(stack.pop());
            removeAll(keepPile.peek()); //problem is thrown here. The types are not guaranteed to be the same
        }
    }
}

0 个答案:

没有答案