在我过去的开发过程中,我一直在考虑这个问题。
我有点反对做这样的事情,我通常声明一个单独的方法来明确处理逻辑。
例如
如果一个类有一个返回对象列表的方法,我认为直接通过它的 getter 方法修改这个集合是个坏主意。
Public Class ReportGenerator{
private List<Configurations> configurations;
List<Configuration> getConfigurations (){
return this.configurations;
}
}
我认为通过执行以下操作是不好的做法:
getConfigurations().remove(1); //remove a configuration via a getter
我会使用以下方法:
Public Class ReportGenerator{
private List<Configurations> configurations;
public List<Configuration> getConfigurations (){
return Collections.unmodifiableList(this.configurations);
}
public void removeConfiguration(int index) //logic explicitly handle the remove
{
this.configurations.remove(index);
}
}
然而,我想到的还有一件事是,如果 Configuration 对象也有 getter 和 setter,那么你不能通过这样做来阻止其他人
reportGenerator.getConfigurations().get(0).settTitle("test");
他们仍然可以通过使用 ReportGenerator 的 getter 方法来更改 Configuration 对象的状态,我认为这是不允许的。但是如果我们想防止这种情况发生,我们必须在 ReportGenerator 类中声明更多方法来将调用转发到 Configuration 对象,并使用防御性副本。
所以我的问题是,如果您有一个对象 A,其中包含另一个使用组合的对象 B,并且它们都有 getter 和 setter,您是否更喜欢通过 A 的 getter 方法更改对象 B 的状态?例如
A.getB().setTitle("");
还是您更喜欢向 A 添加方法以更改 B 的状态(基本上将调用转发到 B)
例如
A.setBTitle("");
在此方法内部,A 调用 B.setTitle("");
很抱歉这个问题很长,我想我不确定我到底想问什么。希望你能理解。:P