为含有地图的课程实施/提供getter / setter的最佳做法是什么?
我看到的最常见的实现是:
public class MyClass { private Map<String,String> myMap; public getMyMap() { /* Return an unmodifiable map */ } public setMyMap(Map<String,String> myMap) { ... } }
或者最好提供一个界面,如:
public getMyMap() { /* Return a modifiable map */ } public addToMap(String key,String value) { myMap.put(key,value); }
为什么这样的方法更好?
解决方法
两者都有其用途.类暴露的方法应该具有适当的抽象级别.例如,如果该类是由Map< String,Dog>支持的狗的注册表,那么它可以提供以下方法:
void addDog(String name,Dog dog); Dog findByName(String name);
如果它是一个允许客户端在一个调用中指定整个规则集的规则引擎,那么它可以显示如下的方法:
void setRules(Map<String,Rule> rules); Map<String,Rule> getRules();