2014-02-10 58 views
-1

我創建了一個數組列表。無法訪問存儲在ArrayList中的對象

List FWD = new ArrayList<Coords>(); 
FWD.add(new Coords(42.41, 37.23)); 
FWD.add(new Coords(37.09, 47.8)); 
FWD.add(new Coords(36.83, 48.42)); 

,然後我要訪問列表中的每個元素以這樣的方式

FWD.get(3).[some method from Coords class] 

但Netbeans的說:

找不到符號符號:方法getIndexX()的位置:類 對象

Coords class:

public class Coords { 
    private double weightY, indexX; 

    Coords(double x, double y){ 
     setIndexX(x); 
     setWeightY(y); 
    } 

    public double getWeightY() { 
     return weightY; 
    } 

    public void setWeightY(double weightY) { 
     this.weightY = weightY; 
    } 

    public double getIndexX() { 
     return indexX; 
    } 

    public void setIndexX(double indexX) { 
     this.indexX = indexX; 
    } 
} 
+3

'名單 FWD =新的ArrayList ();'。數組也是0基地索引,因此它應該是'FWD.get(2);'獲得列表中的最後一個元素。 –

回答

2

您的變量FWD類型爲List,但它實際上包含一個ArrayList<Coords>,它是一個List<Coords>,但編譯器不知道這一點。如果FWD被聲明爲List<Coords>,則此代碼應按原樣工作。

您還應該注意到Java列表是0索引的,因此列表的第三個元素的索引爲2,因此在您提供的示例中不會檢索到元素,儘管這隻會出現在運行。作爲最後一點,可能有趣的是,Java約定規定了要在camelCase中命名的變量,因此您可能更願意命名變量fwd或類似的名稱(或許使用完整的單詞,如果不是太多的話)。

2

變化

List FWD = new ArrayList<Coords>(); 

要:

List<Coords> FWD = new ArrayList<Coords>(); 
+0

這個看起來更好(自java 1.7以後可以使用它) List FWD = new ArrayList <>(); – pshemek

1

嘗試使用:

List<Coords> FWD = new ArrayList<Coords>(); 

這樣編譯器知道FWD持有Coords名單。

0

其實你正在使用

List FWD = new ArrayList<Coords>(); 

這意味着JVM將如下

List<Object> FWD = new ArrayList<Coords>(); 

創建列表,當你使用get(),它將返回Object類的對象,當你調用方法getIndexX() ,該方法在Object類中不存在,因此它會在編譯時給出異常或錯誤。

因此,你應該使用

List<Coords> FWD = new ArrayList<Coords>();