无法访问存储在ArrayList中的对象

问题描述 投票:0回答:5

我创建了一个数组列表。

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() 位置:类 对象

坐标类:

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;
    }
}
java list netbeans
5个回答
2
投票

你的变量FWD是

List
类型,但它实际上包含一个
ArrayList<Coords>
,这是一个
List<Coords>
,但编译器不知道这一点。如果
FWD
被声明为
List<Coords>
,则此代码应该按原样工作。

您还应该注意,Java 列表的索引为 0,因此列表的第三个元素的索引为 2,因此在您提供的示例中不会检索到元素,尽管这只会在运行时出现。

最后一点,值得注意的是,Java 约定规定变量以驼峰命名法命名,因此您可能更愿意将变量命名为

fwd
或类似名称(如果不是太多,也许可以使用完整的单词)。


2
投票

改变

List FWD = new ArrayList<Coords>();

致:

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

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>();

0
投票

试试这个代码

Coords obj = (Coords) FWD.get(0);

Object obj = FWD.get(0);
if (obj instanceof Coords) {
   Coords obj = (Coords) FWD.get(0);
}
© www.soinside.com 2019 - 2024. All rights reserved.