我创建了一个数组列表。
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;
}
}
你的变量FWD是
List
类型,但它实际上包含一个ArrayList<Coords>
,这是一个List<Coords>
,但编译器不知道这一点。如果 FWD
被声明为 List<Coords>
,则此代码应该按原样工作。
您还应该注意,Java 列表的索引为 0,因此列表的第三个元素的索引为 2,因此在您提供的示例中不会检索到元素,尽管这只会在运行时出现。
最后一点,值得注意的是,Java 约定规定变量以驼峰命名法命名,因此您可能更愿意将变量命名为
fwd
或类似名称(如果不是太多,也许可以使用完整的单词)。
改变
List FWD = new ArrayList<Coords>();
致:
List<Coords> FWD = new ArrayList<Coords>();
尝试使用:
List<Coords> FWD = new ArrayList<Coords>();
这样编译器就知道 FWD 保存了
Coords
的列表。
其实你正在使用
List FWD = new ArrayList<Coords>();
这意味着 JVM 将创建如下列表
List<Object> FWD = new ArrayList<Coords>();
当您使用
get()
时,它将返回Object
类的对象,当您调用方法getIndexX()
时,该方法在Object
类中不存在,因此会在编译时给出异常或错误。
因此,你应该使用
List<Coords> FWD = new ArrayList<Coords>();
试试这个代码
Coords obj = (Coords) FWD.get(0);
或
Object obj = FWD.get(0);
if (obj instanceof Coords) {
Coords obj = (Coords) FWD.get(0);
}