jas*_*ine 12 java encapsulation interface getter-setter
为包含地图的类实现/提供getter/setter的最佳实践是什么?
我看到的最常见的实现是:
public class MyClass {
private Map<String, String> myMap;
public getMyMap() { /* Return an unmodifiable map */ }
public setMyMap(Map<String, String> myMap) { ... }
}
Run Code Online (Sandbox Code Playgroud)
或者提供如下界面会更好:
public getMyMap() { /* Return a modifiable map */ }
public addToMap(String key, String value) { myMap.put(key, value); }
Run Code Online (Sandbox Code Playgroud)
为什么这种方法更好?
oks*_*ayt 10
两者都有它们的用途.类暴露的方法应该具有适当的抽象级别.例如,如果该类是由a支持的狗的注册表Map<String, Dog>,那么它可以提供如下方法:
void addDog(String name, Dog dog);
Dog findByName(String name);
Run Code Online (Sandbox Code Playgroud)
如果它是一个允许客户端在一次调用中指定整个规则集的规则引擎,那么它可以公开如下方法:
void setRules(Map<String, Rule> rules);
Map<String, Rule> getRules();
Run Code Online (Sandbox Code Playgroud)