如果我有两个哈希图,类型

HashMap<Integer, HashMap<Integer, Police>> time_id_police;
HashMap<Integer, HashMap<Integer, Ambulance>> time_id_ambulance;

警察和救护车都在扩大救援的地方,我该如何使用类似的方法
HashMap<Integer, HashMap<Integer, Rescue>> getRescue(){
   if (a) return time_id_police;
   else return time_id_ambulance;
}

既不这样,也不将返回类型更改为
HashMap<Integer, HashMap<Integer, ? extends Rescue>>

似乎有效。

非常感谢。

最佳答案

显然HashMap<Integer, HashMap<Integer, Rescue>>是错误的,因为然后可以用time_id_police替换HashMap<Integer, Ambulance>中的值。如果将Rescue替换为? extends Rescue,则可以完成类似的操作。

但是,两次使用? extends会给我们带来一些不会破坏类型系统的信息。

HashMap<Integer, ? extends HashMap<Integer, ? extends Rescue>> getRescue() {

大多数Java程序员更喜欢在类型中使用更通用的Map而不是特定的实现。
Map<Integer, ? extends Map<Integer, ? extends Rescue>> getRescue() {

顺便说一句,如果您更改方法的主体以使用更简洁的三元运算符:
   return a ? time_id_police : time_id_ambulance;

当编译器为您确定类型时,您会得到一条更有用的错误消息:
R.java:18: incompatible types
found   : java.util.HashMap<java.lang.Integer,capture of ? extends java.util.HashMap<java.lang.Integer,? extends Rescue>>
required: java.util.HashMap<java.lang.Integer,java.util.HashMap<java.lang.Integer,Rescue>>
   return a ? time_id_police : time_id_ambulance;
        ^
1 error

10-07 19:10
查看更多