为包含map的类实现/提供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); }为什么这样的方法更好呢?
发布于 2011-08-12 12:07:35
两者都有各自的用途。类公开的方法应该具有适当的抽象级别。例如,如果类是由Map<String, Dog>支持的狗的注册表,那么它可以提供如下方法:
void addDog(String name, Dog dog);
Dog findByName(String name);如果它是一个规则引擎,允许客户端在一次调用中指定整个规则集,那么它可以公开如下方法:
void setRules(Map<String, Rule> rules);
Map<String, Rule> getRules();发布于 2011-08-12 11:49:14
一般来说,我会说尽量不要返回地图。有一个接受键并返回值的方法。获取map是可以的,只要您复制它,但我更喜欢的方法是获取键/值并将其放入map中。
如果必须返回地图,则应返回只读版本或其副本。set方法也应该复制映射。
允许调用者在类不知道的情况下改变类内的数据是一个坏主意,传递或保留可变数据是一个坏主意。
发布于 2011-08-15 12:00:42
这完全取决于你的需求。在大多数情况下,这可能就足够了。您甚至可能没有返回map的getter方法。如果您使用我的插件,它可能会帮助您创建这些方法:http://fast-code.sourceforge.net/documentation.htm#create-list-map as eclipse不会帮助您创建add方法。
https://stackoverflow.com/questions/7035355
复制相似问题