2013-10-09 210 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