Java 使用Map返回的方法的最佳实践
假设我有一个将map作为返回类型并使用泛型的方法 我想知道填充贴图对象的最佳实践是什么。 请看片段Java 使用Map返回的方法的最佳实践,java,generics,map,Java,Generics,Map,假设我有一个将map作为返回类型并使用泛型的方法 我想知道填充贴图对象的最佳实践是什么。 请看片段 public Map<String,?> getEmployeeInfo(String query) { Map<String,Object> dataMap = new HashMap<String,Object>(); // do some op. String empId = "abc123"; List<Long&g
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;
}
公共地图getEmployeeInfo(字符串查询){
Map dataMap=newhashmap();
//做些行动。
字符串empId=“abc123”;
List projectId=new ArrayList();
List performanceGoals=new ArrayList();
dataMap.put(“empId”,empId);
put(“projectds”,projectds);
dataMap.put(“性能自我”,性能自我);
返回数据图;
}
最佳做法是:不要使用此选项 使班级成为有成员的雇员
public class Employee {
String id;
List<Long> projectIds;
List<String> performanceGoals;
...
}
更新以澄清返回地图通常不好的原因
如果您的方法返回:
Map
或Map
你说的(俚语):
嘿,看这里,我要还点东西。将其存储在一个名为“something”的变量中,因为我没有说任何关于该值的内容
如果您编写这个方法,您必须确保,您知道使用地图的每一行代码
假设我想将
employeeId
从String
更改为Integer
。这将导致非常糟糕的运行时异常
和ClassCastExceptions
你的问题是什么?他想要最好的实践来解决糟糕的实践。啊,平庸的实践!现在这是我的地盘了。@Jeroen Vannevel我想知道你们是否有方法可以返回一个带有泛型的映射,什么是最佳实践。我知道,若签名像地图,你们就不应该是地图?@jamesT:遵循下面克里斯蒂安的建议。当您打算创建一个并非真正属于Object
类型的Object
集合来将它们组合在一起时,您最好使用自定义类。感谢您的回答,非常感谢。我正在寻找一个场景,假设我有一个类,但我需要一个带有map的泛型方法,它可能会向调用者返回不同的nert值,等等。你需要一个泛型方法还是你认为你需要它?我的意思是你的问题听起来像“我想写一个或映射器,因为JPA和Hibernate是不够的”,我确实需要它。查询逻辑是独立的,我确实为此使用了适当的集合。我想问的是,就最佳实践和性能考虑而言,您是否有返回类型“要放什么”和“不放什么”等映射。最佳实践是:不要使用混合映射。关于性能:我不明白这个问题。为地图创建的值将远远大于将它们插入地图所花费的时间。
public Employee getEmployeeInfo(String query) {
...