Java中的不兼容类型错误

Java中的不兼容类型错误,java,types,compilation,Java,Types,Compilation,我一直收到一个错误,说有不兼容的类型。我直接从一本书中复制了这一点,因为我们应该对代码进行修改以增强战争游戏。我已经完成并编译了所有其他的类,但这一类让我感到很适合。代码如下: public class ArrayStack<E> implements Stack<E> { private E[] data; private int size; public ArrayStack() { data = (E[])(new Object[1]); si

我一直收到一个错误,说有不兼容的类型。我直接从一本书中复制了这一点,因为我们应该对代码进行修改以增强战争游戏。我已经完成并编译了所有其他的类,但这一类让我感到很适合。代码如下:

public class ArrayStack<E> implements Stack<E> {

private E[] data;

private int size;

public ArrayStack() {
    data = (E[])(new Object[1]);
    size = 0;
}

public boolean isEmpty() {
    return size == 0;
}

public Object pop() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    size--;
    return data[size];
}

public Object peek() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    return data[size - 1];
}

protected boolean isFull() {
    return size == data.length;
}

public void push(Object target) {
    if (isFull()) {
        stretch();
    }
    data[size] = target;
    size++;
}

protected void stretch() {
    E[] newData = (E[])(new Object[data.length * 2]);
    for (int i = 0; i < data.length; i++) {
        newData[i] = data[i];
    }
    data = newData;
}   
}
公共类ArrayStack实现堆栈{
私人电子数据;
私有整数大小;
公共阵列堆栈(){
数据=(E[])(新对象[1]);
尺寸=0;
}
公共布尔值为空(){
返回大小==0;
}
公共对象pop(){
if(isEmpty()){
抛出新的EmptyStructureException();
}
大小--;
返回数据[大小];
}
公共对象peek(){
if(isEmpty()){
抛出新的EmptyStructureException();
}
返回数据[size-1];
}
受保护的布尔值isFull(){
返回大小==data.length;
}
公共无效推送(对象目标){
如果(isFull()){
拉伸();
}
数据[大小]=目标;
大小++;
}
受保护的空拉伸(){
E[]newData=(E[])(新对象[data.length*2]);
对于(int i=0;i
错误发生在数据[size]=目标的push()方法中;线路

编辑::: 我现在收到这个错误。 “类型堆栈不接受参数 公共类ArrayStack实现堆栈“

堆栈类如下所示

public interface Stack<E> {

public boolean isEmpty();

public E peek();

public E pop();

public void push(E target);

}
公共接口堆栈{
公共布尔值为空();
公共E peek();
公共E pop();
公共无效推送(E目标);
}

对象
更改为
E
,作为
push()
方法的参数类型

public void push(E target) {
    if (isFull()) {
        stretch();
    }
    data[size] = target;
    size++;
}
同样,您还应该将
pop()
peek()
的声明返回类型更改为
E

public E pop() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    size--;
    return data[size];
}

public E peek() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    return data[size - 1];
}

现在您的类是完全泛型的。

push
方法与类的其余部分不同,请将其更改为:

public void push(E target) {
    if (isFull()) {
        stretch();
    }
    data[size] = target;
    size++;
}
在任何情况下,JDK附带的类都能满足您的需求,而不是从书本上粘贴的代码。

ArrayDeque<YourObj> stack = new ArrayDeque<YourObj>();
stack.push(new YourObj());
YourObj head = stack.peek();
head = stack.pop();
ArrayDeque stack=new ArrayDeque();
stack.push(新的YourObj());
YourObj head=stack.peek();
head=stack.pop();

我现在收到这个错误。“类型堆栈不接受参数公共类ArrayStack实现堆栈”@Alec:
Stack
不是JDK中的接口,它是一个类。在你的代码中,你可以从一个类中
实现
,而你可以
扩展
类。我现在收到这个错误。“类型堆栈不接受参数公共类ArrayStack实现堆栈”请显示
堆栈
接口(我假设您没有使用内置类
java.util.Stack
)。