首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有映射的类的Getters/setter

具有映射的类的Getters/setter
EN

Stack Overflow用户
提问于 2011-08-12 11:40:59
回答 4查看 12.5K关注 0票数 12

为包含map的类实现/提供getter/setter的最佳实践是什么?

我看到的最常见的实现是:

代码语言:javascript
复制
public class MyClass {

  private Map<String, String> myMap;
  public getMyMap() { /* Return an unmodifiable map */ }
  public setMyMap(Map<String, String> myMap) { ... }
}

或者提供如下接口会更好:

代码语言:javascript
复制
public getMyMap() { /* Return a modifiable map */ }
public addToMap(String key, String value) { myMap.put(key, value); }

为什么这样的方法更好呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-12 12:07:35

两者都有各自的用途。类公开的方法应该具有适当的抽象级别。例如,如果类是由Map<String, Dog>支持的狗的注册表,那么它可以提供如下方法:

代码语言:javascript
复制
void addDog(String name, Dog dog);
Dog findByName(String name);

如果它是一个规则引擎,允许客户端在一次调用中指定整个规则集,那么它可以公开如下方法:

代码语言:javascript
复制
void setRules(Map<String, Rule> rules);
Map<String, Rule> getRules();
票数 10
EN

Stack Overflow用户

发布于 2011-08-12 11:49:14

一般来说,我会说尽量不要返回地图。有一个接受键并返回值的方法。获取map是可以的,只要您复制它,但我更喜欢的方法是获取键/值并将其放入map中。

如果必须返回地图,则应返回只读版本或其副本。set方法也应该复制映射。

允许调用者在类不知道的情况下改变类内的数据是一个坏主意,传递或保留可变数据是一个坏主意。

票数 4
EN

Stack Overflow用户

发布于 2011-08-15 12:00:42

这完全取决于你的需求。在大多数情况下,这可能就足够了。您甚至可能没有返回map的getter方法。如果您使用我的插件,它可能会帮助您创建这些方法:http://fast-code.sourceforge.net/documentation.htm#create-list-map as eclipse不会帮助您创建add方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7035355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档