0

我最近一直在尝试扩展集合对象,而不是对我的域对象使用组合。因此,例如,我将使用这个:

public class Path extends ArrayList<PathElement> {
}

public static void main(String args[]) {
  Path path = new Path();
  path.add(new PathElement());
}

代替:

public class Path {
  private List<PathElement> pathElements = new ArrayList<PathElement>();

  /* getter/setter*/

}

public static void main(String args[]) {
  Path path = new Path();
  path.getPathElements().add(new PathElement());
}

这是一种常见/可接受的做法吗?有什么缺点或更好的选择吗?我可以看到的一个缺点是实现不能轻易更改,因此您不能使用 LinkedList 代替 ArrayList。

4

2 回答 2

2

你的第二种方法是正确的。除非您修改它们的行为或添加新行为,否则不应扩展内置数据结构类。

即使您修改或添加新行为,您的域对象也不应该扩展它们。相反,创建一个扩展 Map 或 List 的单独类,并在域对象中使用新类,如第二个代码块所示。

于 2012-06-20T15:26:14.207 回答
0

你的方法绝对是错误的方法。
您应该使用组合而不是继承。如果没有正确完成,继承会“破坏”封装并与实现细节相结合。这意味着您应该只在您的控制下扩展类并为扩展而设计。否则你会陷入一团糟

于 2012-06-20T15:50:16.897 回答