【问题标题】:Incompatible Types Error in JavaJava中的不兼容类型错误
【发布时间】:2013-10-09 23:44:33
【问题描述】:

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

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;
}   
}

错误发生在数据[大小] = 目标处的 push() 方法中;行。

编辑::: 我现在收到此错误。 “类型堆栈不带参数 公共类ArrayStack实现栈”

栈类如下。

public interface Stack<E> {

public boolean isEmpty();

public E peek();

public E pop();

public void push(E target);

}

【问题讨论】:

  • 请显示你的Stack界面(我假设你没有使用内置类java.util.Stack)。

标签: java types compilation


【解决方案1】:

Object 更改为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];
}

现在你的类是完全通用的。

【讨论】:

  • 我现在收到此错误。 "type Stack 不带参数 public class ArrayStack implements Stack"
  • @Alec:Stack&lt;E&gt; 在 JDK 中不是一个接口,它是一个类。在你的代码中,你 implement 来自一个班级,而你可以只是 extend 班级。
【解决方案2】:

push 方法不像类的其他部分那样通用,将其更改为:

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

无论如何,JDK 附带了 ArrayDeque 类,它可以满足您的要求,而无需从书中粘贴一段代码。

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

【讨论】:

  • 我现在收到此错误。 "type Stack 不带参数 public class ArrayStack implements Stack"
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 2016-09-11
  • 2013-10-29
  • 2011-08-26
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多