假设我有一个方法,它将map作为返回类型并使用泛型。
我想知道填充Map对象的最佳做法是什么。 请参阅代码段。
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;
}
答案 0 :(得分:4)
最佳做法是:不要使用它。
使用成员
创建一个类员工public class Employee {
String id;
List<Long> projectIds;
List<String> performanceGoals;
...
}
您将方法更改为:
public Employee getEmployeeInfo(String query) {
...
更新以澄清为什么返回地图一般不好
如果您的方法返回:
Map<String,?>
或Map<String,? extends Object>
你说(俚语):
嘿,看看这里,我要回来了。将它存储在一个名为“something”的变量中,因为我没有对该值进行任何说明。
如果您编写此方法,则必须确保您知道每一行代码,以及使用Map的位置。
假设我想将employeeId
从String
更改为Integer
。这会导致非常糟糕RuntimeExceptions
和ClassCastExceptions
。