【问题标题】:Best practice for method with Map returnMap 返回方法的最佳实践
【发布时间】:2013-12-07 01:00:31
【问题描述】:

假设我有一个以 map 作为返回类型并使用泛型的方法。

我想知道填充该 Map 对象的最佳做法是什么。 请看sn-p。

public Map<String,?> getEmployeeInfo(String query) {

Map<String,Object> dataMap = new HashMap<String,Object>();

    // do some op.

    String empId = "abc123";

    List<Long> projectIds = new ArrayList<Long>();

    List<String> performanceGoals = new ArrayList<String>();


    dataMap.put("empId",empId);
    dataMap.put("projectIds",projectIds);
    dataMap.put("performanceGoals",performanceGoals);

    return dataMap;
}

【问题讨论】:

  • 你的问题是什么?
  • 他想要最好的做法,而不是糟糕的做法。
  • 啊,平庸的做法!现在这是我的地盘了。
  • @Jeroen Vannevel 我想知道您是否有方法可以返回带有泛型的地图什么是最佳实践。我知道你不应该是 Map 如果签名像 Map?
  • @jamesT:遵循 Christian 的以下建议。当你要创建一个Objects 的集合时,这些Objects 并不是真正的Object 类型,只是为了将它们组合在一起,你很可能最好使用自定义类。

标签: java generics map


【解决方案1】:

最佳做法是:不要使用它。

与成员一起创建班级员工

public class Employee {
    String id; 
    List<Long> projectIds;
    List<String> performanceGoals;

    ...

}

您的方法更改为:

public Employee getEmployeeInfo(String query) {
    ...

更新说明为什么返回 Map 通常不好

如果你的方法返回:

Map&lt;String,?&gt;Map&lt;String,? extends Object&gt; 你说(俚语):

嘿,看这里,我正在返回一些东西。将它存储在一个名为“something”的变量中,因为我没有说任何关于值的内容。

如果你编写这个方法,你必须确保你知道每一行代码,你在哪里使用你的地图。

假设我想将 employeeIdString 更改为 Integer。这将导致非常糟糕的RuntimeExceptionsClassCastExceptions

【讨论】:

  • 感谢您的回答,不胜感激。我正在寻找一个场景,说我有一个类,但我需要一个带有 map 的通用方法,可能会向调用者等返回不同的值。
  • 你需要一个通用方法还是你认为你需要它?我的意思是你的问题听起来像“我想写一个 OR 映射器,因为 JPA 和 Hibernate 还不够”
  • 我确实需要它。查询逻辑是独立的,我确实为此使用了适当的集合。我想问的是,就最佳实践和性能问题而言,您是否有诸如返回类型之类的地图,什么不该放什么等等。
  • 最佳做法是:不要使用混合地图。关于性能:我不明白这个问题。为地图创建值将远远大于将它们插入地图所花费的时间。
猜你喜欢
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 2022-06-15
  • 2016-11-23
  • 2014-06-16
  • 2015-09-01
相关资源
最近更新 更多