我想扩展ArrayList以添加一些特定类的方法,这些方法被扩展的ArrayList所持有。下面是一个简化的示例代码。
我认为这很合理,但我很新于Java,我看到其他问题不鼓励扩展ArrayList,例如Extending ArrayList and Creating new methods。我不了解足够的Java来理解反对意见。
在我的先前尝试中,我最终创建了许多在ThingContainer中本质上是ArrayList传递的方法,因此扩展似乎更容易。
是否有更好的方法来实现我正在尝试做的事情?如果是这样,应该如何实现?
我认为这很合理,但我很新于Java,我看到其他问题不鼓励扩展ArrayList,例如Extending ArrayList and Creating new methods。我不了解足够的Java来理解反对意见。
在我的先前尝试中,我最终创建了许多在ThingContainer中本质上是ArrayList传递的方法,因此扩展似乎更容易。
是否有更好的方法来实现我正在尝试做的事情?如果是这样,应该如何实现?
import java.util.*;
class Thing {
public String name;
public int amt;
public Thing(String name, int amt) {
this.name = name;
this.amt = amt;
}
public String toString() {
return String.format("%s: %d", name, amt);
}
public int getAmt() {
return amt;
}
}
class ThingContainer extends ArrayList<Thing> {
public void report() {
for(int i=0; i < size(); i++) {
System.out.println(get(i));
}
}
public int total() {
int tot = 0;
for(int i=0; i < size(); i++) {
tot += ((Thing)get(i)).getAmt();
}
return tot;
}
}
public class Tester {
public static void main(String[] args) {
ThingContainer blue = new ThingContainer();
Thing a = new Thing("A", 2);
Thing b = new Thing("B", 4);
blue.add(a);
blue.add(b);
blue.report();
System.out.println(blue.total());
for (Thing tc: blue) {
System.out.println(tc);
}
}
}