2014-02-13 67 views
0

這是我的ArrayListStack類的頂部。我試圖使值成爲T的數組列表10.我得到一個錯誤「不兼容的類型所需:ArrayListStack找到:java.util.ArrayList」。在直線的數值=新的ArrayList(10)」。我將如何正確設置這個值感謝Java Array列表堆棧

import java.util.ArrayList; 

public class ArrayListStack<T> implements StackInterface<T> 
{ 
    private ArrayListStack<Integer> values= new ArrayListStack<Integer>(); 
    private int size; 

    public ArrayListStack() 
    { 
     size = 0; 
     values = new ArrayList<T>(10); 

    } 
+0

你檢查錯誤? 'values'在構造函數中甚至有不同的類型。 – Smutje

回答

2

我認爲你正試圖使用​​一個ArrayList來支持你的ArrayListStack。這是沒有意義的一個ArrayListStack遏制另一個ArrayListStack如果這是編譯,每個新ArrayListStack將創建另一個ArrayListStack,這將創造另一個ArrayListStack

更改您的valuesArrayList的類型,並使用您的T泛型類型參數:

private ArrayList<T> values; 

無需在此初始化;你正在構造函數中初始化它。

+0

我認爲在看完他的代碼之後,他打算擴展ArrayList – StormeHawke

+0

@StormeHawke可以這麼做;這是創建'ArrayListStack'的一種方法。但是由於構造函數正在創建自己的'ArrayList',我認爲OP將繼承構造。 – rgettman

+0

@StormeHawke如果我試圖推入一些東西,這給了我一個錯誤,但它不正確的數組列表? public void push(T value) {value = values.add(size); size ++;} – user3071909

0

這裏有多個錯誤:

  • 聲明valuesArrayListStack,而它應該是一個ArrayList
  • 通過指定類型參數Integer聲明values,同時它應該保持T
  • 你在構造函數外初始化values以在構造函數中再次初始化
  • 您嘗試初始化values爲不同的類型,有不同的類型參數

應該

private ArrayList<T> values; 

ArrayStackList() { 
    value = new ArrayList<T>(10); 
} 
0

您分配一個泛型類型爲Integer對象的數組列表。此外,您已經在您的類定義中初始化列表。

0
public class ArrayListStack<T> implements StackInterface<T> 
{ 
    private ArrayList<T> values; // <-- Note change here 
    private int size; 

    public ArrayListStack() 
    { 
     size = 0; 
     values = new ArrayList<T>(10); 
    } 
} 

你需要有相同的類型和一般類型values當你建造它,當你把它聲明。 T是您的泛型類型(泛型類型,如果您願意的話)。我還刪除了字段聲明中多餘的初始化,因爲您正在構造函數中重新構造它。

+0

但是,如果我嘗試在推送函數中向數組列表添加某些內容,則會出現錯誤。 public void push(T value){value = values.add(size);大小++;}。有什麼特別的方法,我必須添加一些東西? – user3071909

+0

@ user3071909,'ArrayList.add'返回'boolean',而不是'T',並接受'T',而不是'int'。你應該使用'public void push(T value){values.add(value);大小++; }' –

0

如果您要創建一個結合了ArrayListStackInterface功能的類,請進行以下更改。否則,你的代碼似乎並沒有太大的意義

import java.util.ArrayList; 

public class ArrayListStack<T> extends ArrayList<T> implements StackInterface<T> 
{ 
    public ArrayListStack() 
    { 
     //You can set this to whatever initial size you like, 
     //however if you look at the source code of ArrayList 
     //you'll discover that 10 is the default size of an ArrayList 
     super(10); 
    } 
    //Add whatever methods are required by StackInterface 
} 

在這種情況下,您可以無縫地使用你的類作爲一個標準ArrayListStackInterface