如何将arraylist中的值转换为抽象类以进行比较

时间:2014-10-16 04:48:30

标签: java arraylist

示例:我有一个班级'

;

class Model {
  private ArrayList<Picture> pictures;
  public ArrayList<Picture> getPictureList() { return pictures; }
}

(我有实现所有这些的方法,这只是例如)

然后我有

abstract class Picture{
  public boolean touches(Picture p) {}
}

我希望这个函数从about arraylist中提取值,以便与参数&#34; p&#34;进行比较。看两张照片是否相互碰触。 我想用这样的东西

public boolean touches(Picture p) {
     for (Picture picture : pictures) {
         //compare values
     }
}

我怎样才能做到这一点,以便我可以从班级&#39;模型中提取价值。进入抽象类图片?

2 个答案:

答案 0 :(得分:0)

您已经拥有getPictureList()方法,因此您可以使用它:

public boolean touches(Picture p) {
     for (Picture picture : modelInstance.getPictureList()) {
         //compare values
     }
}

但是,更好的实施方法是删除getPictureList()并将其替换为Picture getPicture(int i)int getNumberOfPictures()。这样,Model类的用户将无法访问内部ArrayList(这将允许他们直接操作它)。

然后你的代码看起来像这样:

public boolean touches(Picture p) {
     for (int i = 0; i < modelInstance.getNumberOfPictures(); i++) {
         Picture picture = modelInstance.getPicture(i);
         //compare values
     }
}

另一种方法是实现迭代器,即让Model实现Iterable<Picture>接口。

然后你的代码看起来像这样:

public boolean touches(Picture p) {
     for (Picture picture : modelInstance) {
         //compare values
     }
}

答案 1 :(得分:0)

所以我想回答我自己的问题,我不确定这是否会对任何人有所帮助,但我认为无论如何我都会把它发布在这里。基本上我不正确地接近这个问题。 Model类创建类型为Picture的ArrayList,因此值已存在于Picture类变量中。我想要做的是在不需要的时候将整个ArrayList发送到类中。我需要做的是从overlaps()类调用方法Model,如此

for (Picture p1 : pictures) {
    for (Picture p2 : pictures) {
     p1.overlaps(p2);
     }
}

这样做会使每张图片对照ArrayList中的每一张图片并确定它们是否重叠。 (假设重叠功能正确实现) 这实际上是用Java理解的一个非常重要的想法,幸运的是我有一个可以解释它的朋友