2013-10-09 144 views
0

我不断收到一个错误,指出存在不兼容的类型。我直接抄袭了一本书,因为我们应该修改代码来增强战争游戏。我有所有其他类完成和编译,但这一个给我适合。这里是代码:Java中的不兼容类型错误

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 []方法在data [size] = target;线。编辑::: 我现在收到此错误。 “类型堆栈不带参数 公共类ArrayStack implements堆栈”

堆栈类如下。

public interface Stack<E> { 

public boolean isEmpty(); 

public E peek(); 

public E pop(); 

public void push(E target); 

} 
+1

请显示您的Stack接口(我假设您没有使用内置类java.util.Stack)。 – rgettman

回答

1

变化ObjectE作为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]; 
} 

现在类是完全通用的。

+0

我现在收到此错误。 “类型Stack不带参数public class ArrayStack implements Stack” – Alec

+1

@Alec:'Stack '不是JDK中的接口,它是一个类。在你的代码中,你可以从类中“实现”,而你只需要“扩展”类。 – Jack

0

push方法不是泛型类的类的其余部分,将其更改为:

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

在任何情况下,JDK附带类ArrayDeque其满足您的要求而不从粘贴一块O编码一本书。

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

我现在收到此错误。 “类型Stack不带参数public class ArrayStack implements Stack” – Alec