1

我试图add(T thing)通过使用堆栈的继承推送方法来定义 void 方法,但 Eclipse 说返回类型不兼容,Vector<T>.add(T)并希望我将返回类型更改为add(T)没有意义的布尔值。下面是我的代码

public class ListStack<T> extends Stack<T> implements SomeList<T>{
   Stack<T> stack1=new Stack<T>();
public ListStack(){//constructor
    super();
    stack1=new Stack<T>();
 }
//add method
 public void add(T something){
    this.push(something);}
}

这是我的SomeList界面

public interface SomeList<T>{
public void add(T something);
public void take(T idx);
  .
  . 
  .
}
4

3 回答 3

2

好吧,因为您持有一个Stack<T>成员实例,所以您不需要从同一个类继承。

删除继承并改用您的成员:

public void add(T something){
    stack1.push(something);
}

如果您不再继承Stack<T>您的编译器,则不应再抱怨不同的返回类型add(T)


我认为你应该看看适配器模式

这是我的做法:

界面

interface MyList<T> {
    public void addFront(T thing);

    public void remove(int pos);

    public void removeEnd();

    public T get(int pos);

    public int length();

    public boolean isEmpty();

}

执行

class MyListImpl<T> implements MyList {
    Stack<T> mStack;

    public MyListImpl() {
        mStack = new Stack<T>();
    }

    public void addFront(T thing) {
        mStack.push(thing);
    }

    public void remove(int pos) {
        //mStack...
    }

    public void removeEnd() {
        //mStack...
    }

    public T get(int pos) {
        // return mStack...
    }

    public int length() {
        // return mStack... 
    }

    public boolean isEmpty() {
        // return mStack...
    }

}

于 2013-10-30T06:54:53.010 回答
0

Stack Class必须add()拥有返回类型为的方法boolean

于 2013-10-30T06:22:44.323 回答
0

Stack类扩展Vector类,其中包含boolean add(E e). 我认为 Eclipse 混淆了 中的add方法Vector和界面add中的方法。SomeList

于 2013-10-30T06:23:02.553 回答