Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Map返回的方法的最佳实践_Java_Generics_Map - Fatal编程技术网

Java 使用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

假设我有一个将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;
}
公共地图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) {
    ...