gpt4 book ai didi

嵌套 HashMap 中的java泛型/继承

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:43 26 4
gpt4 key购买 nike

如果我有两个 hashmaps 类型

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

警察和救护车都扩展了 Rescue,我怎样才能有类似的方法

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 twice 给了我们一些不会破坏类型系统的东西。

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

关于嵌套 HashMap 中的java泛型/继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1341150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com