【问题标题】:Calling methods on objects in an arraylist调用数组列表中对象的方法
【发布时间】:2018-10-21 07:41:33
【问题描述】:

我有一个 ArrayList,我想在列表中的前两个对象上调用两个方法,在其余对象上调用不同的方法,我怎样才能最简单地做到这一点?

到目前为止我有这个

ArrayList<Material> materials = new ArrayList();
StyklisteMetodeKlasse.fillArray(materials);

for(Material materialer: materials.subList(0, 1)){  
    int brugerInput = 0; // this is only a temporary varible
    materialer.setAmount(Material.calculatePlanks(brugerInput, materialer.getLength()));
    materialer.setAmount(Material.calculatePlanks(brugerInput, materialer.getLength()));
//here is some code where i call different methods on the rest of the materials

当我在“materialer”上调用一个方法时,它是适用于所有对象还是仅适用于第一个对象,然后是第二个对象?

【问题讨论】:

  • materials.subList(0, 1) 给你一个只有第一个元素的子列表。因此,在这种情况下,您只需为第一个元素调用 setAmount。但是,如果将其更改为 subList(0, 2),则前两个元素将调用 setAmount
  • 是否总是只是要调用方法A() 的列表中的前两个元素,以及要调用方法B() 的其余元素开,没有任何额外的标准?如果是这样,为什么不直接拆分列表?
  • 好的,所以我应该将 subList 更改为然而元素,该方法应该被称为一个?我宁愿使用非增强的 for 循环,但我无法获取对象......有没有我可以实现的 pther 设计模式?
  • 您“更愿意使用非增强的 for 循环”,为什么?是什么让您认为您无法使用它获取对象?
  • @user991710 所以我有一个“材料”的ArrayList,我需要计算一定长度所需的数量,但每种材料使用的方法不同,所以我认为会更容易只使用一个列表和列表的子列表,然后调用每个方法?

标签: java arraylist


【解决方案1】:

最好的方法很可能是最简单的方法。使用多态性,并尝试在运行时获取对象的类型并选择您需要做的事情,这将是一个时尚的解决方案,但正如您所说,它可能会变得复杂,特别是如果您无法控制结构和性质传递给您的对象。

或者,您可以让您的类实现一个接口,该接口抽象您需要执行的操作。这将允许您始终调用相同的方法,而不必担心是谁。

正如 cmets 中所指出的那样,硬编码索引值可能会导致比它所解决的问题更多的麻烦,因为它假设曾经使用您的方法的人都知道它的具体工作原理,而不是应该怎么做。

最有可能的是,最好的方法是将您的方法更改为获取 2 个列表,而不是 1 个。这种方法更容易理解,也给您更多的控制权,并且让您做的假设更少,这通常总是一个好的东西。

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2017-10-11
    • 2012-05-20
    • 1970-01-01
    • 2017-01-21
    • 2017-11-01
    相关资源
    最近更新 更多