我最近一直在尝试扩展集合对象,而不是使用我的域对象的组合。例如,我将使用它:
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。
答案 0 :(得分:2)
你的第二种方法是正确的。除非您正在修改其行为或添加新行为,否则不应扩展内置数据结构类。
即使您修改或添加新行为,您的域对象也不应该扩展它们。相反,创建一个单独的类,扩展Map或List并在域对象中使用新类,如第二个代码块中所示。
答案 1 :(得分:0)
你的方法肯定是错误的。
你应该使用组合而不是继承。如果没有正确完成,继承“打破”封装并与实现细节耦合。这意味着您应该只在您的控制下扩展类并为扩展而设计。否则你可能会遇到麻烦