抱歉,我不确定如何清楚地表达我的问题。 我有一个堆栈,我想通过使用我的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
}
}
}