什么更好? MyPojo.getList()。add(Object)或MyPojo.add()?

时间:2017-04-05 14:48:55

标签: java list

您有一个包含列表的对象:

public class MyPojo {
    private List<Object> list;
}

你想在这个pojo的列表中添加一个项目。
哪个更好?

1)你添加一个getter,获取列表并向其添加一个对象

public class MyPojo {
    private List<Object> list;
    public List<Object> getList() {
        return list;
    }
}
// and then use
new MyPojo().getList().add(Object);

2)你在Pojo中写一个addItem(),将对象插入列表

public class MyPojo {
    private List<Object> list;
    public void addItem(Object item) {
        list.add(item);
    }
}
// and then use
new MyPojo().addItem(Object);

在这种情况下,代码质量的最佳实践是什么? 谢谢!

3 个答案:

答案 0 :(得分:1)

如果你有选择的自由,总是更喜欢第二种方式,即调用内部修改实例字段的方法。

在第一个中,您清楚地暴露了List<Object>实例字段,这是一种非常糟糕的编码方式。你永远不应该采用它。

答案 1 :(得分:1)

所有答案都是固执己见的。我认为#1打破了封装,所以我选择#2。但是,我只会对域对象执行此操作,即我不会为数据传输对象(DTO&#39; s)或任何其他数据值执行此操作。

答案 2 :(得分:0)

假设您选择了第一种方法,它在不知情的情况下修改了类的内部表示。编写了许多修改列表的客户端代码。

稍后,您将更改类,以便您需要知道列表是否已被修改。或者您可能想要更改内部表示。但现在所有这些外部代码都违反了封装。修改外部代码会更昂贵或不可行,具体取决于您是否可以修改它。

第二种方法封装了数据。您可以将门打开以更改内部表示或监控更改。