当前位置: 首页 > 知识库问答 >
问题:

需要在map(map)

凌运恒
2023-03-14

我必须在下面的地图中输入一个整数值。

Map<String,?> map
map.put("key",2000);

当我运行上面的代码我得到下面的错误,有人能帮我吗

incompatible types: java.lang.Integer cannot be converted to capture#1 of ?

共有2个答案

燕光熙
2023-03-14

你可以给一个Map类型的变量赋值

Map<String, ?> map;

map = new HashMap<String, Object>(); // works
map = new HashMap<String, String>(); // works
map = new HashMap<String, Number>(); // works
map = new HashMap<String, Integer>(); // works

这一切都有效。假设map=newhashmap

很明显,这没有意义。因此代码不能编译。

我假设你的眼球和人脑看到了这个代码,并确定你的地图不可能指向除地图以外的任何东西

但java并不是这样工作的,类型的部分意义在于限制自己,让自己以后可以自由地分配其他东西。

这与此完全类似:

Object x = "hello";
x.toLowerCase();

上面没有编译:对象类型没有toLowerCase()方法。是的,是的,我们的眼球和大脑看着这个,然后说:这太愚蠢了,当然了!看,x显然指向一个字符串!

但是在这种情况下,就...写String x="Hello"

所以,这同样适用于你的场景。只需编写Map

有时,你有一个动态代码,它想检查一件事是什么,并据此采取行动。例如:

void foo(Object o) {
  if (o instanceof String s) return s.toLowerCase();
  throw new SomeException();
}

但是你不能对泛型这样做——泛型不能被instanceof检查。您不能执行以下操作:如果mymap变量指向的对象具有Integer作为值类型(或整数的任何超类型),则执行map。放入(“key”,2000),否则不要。

这不是泛型在java中的工作方式。根本没有办法做到这一点。

你唯一能做的就是颁布法令。编写代码,如果它是真的,则可以正常工作,如果它不是真的,则会把一切都搞砸:您可以强制运行。把(“key”,2000)放在地图上,这会把它放在地图上,如果这是一个声明为,地图的地图

因此,当你强制执行时,为什么编译器会大喊大叫,为什么你不应该这么做。泛型的唯一目的是让你的编程生活更容易,澄清API,捕捉bug,而你。。通过强迫来做相反的事情。但是,嘿,如果你真的想这么做(可能性很小):

void example(Map<String, ?> map) {
  Map forceIt = map; // raw assignment
  forceIt.put("key", 2000); // compiles
}

以上内容会编译并执行您要求的操作,但会警告您这是一个非常糟糕的主意。

of(o instanceof String)返回((String)o)。toLowerCase();

和弘博
2023-03-14
        Map<String, Integer> map = new Map<String, Integer>;
        map.put("key",2000);
 类似资料:
  • ES6标准的一个新特性是Map类,用于创建数据的键:值集合。好,对。但是,为什么Javascript需要这样一个类呢?JS对象表示法实际上也是数据的键:值集合,这还不够吗?那么,有什么区别呢?

  • 我有一个闪烁的地图,一旦数据通过流就会被激活。 即使没有数据通过,我也要调用该地图。 我将map移动到一个函数中(无限函数调用),但是flink作业永远不会运行。如果我将其添加到map中,它只会在数据通过时被激活。 想法是,在一个infinte循环中有一个map,检查一些共享变量和另一个闪烁流监控kafka队列,如果数据进入它的过程,它会更改一个共享变量,以某种方式影响无限循环并继续。 如何调用无

  • 问题内容: 我需要哪些键中的一个或类,并且其值是这两个类中的一个,的对象列表 分别 。 例如: 我试过了,但是没有编译。 确实可以编译,但是在这种情况下不应该同时编译大小写和案例。 可能吗? 问题答案: 我认为不可能在类型中对此进行编码,我会使用自定义类来实现 只要您不将参考泄漏到此类之外,就可以在此处禁止显示警告。

  • 问题内容: 我正在尝试计算列表中值的平方和。以下是三个均计算所需值的变体。我想知道哪个是最有效的。我希望第三个装箱效率更高,因为自动装箱仅执行一次。 问题答案: 如有疑问,请测试!使用jmh,我在100k元素的列表上得到以下结果(以微秒为单位,更好): 因此,从快到慢,您已经拥有: 和 请注意,结果在很大程度上取决于JIT优化。如果映射中的逻辑更加复杂,则某些优化可能不可用(较长的代码=较少的内联

  • 我试图在没有Java 8的Android应用程序中应用RXJava,这意味着我不能使用lambda函数。为了确保我理解基础知识,我只想看一个使用map()和reduce()的简单示例。 我试图实现的示例是求和作为String类型List提供的整数。我想把整件事包装在一个函数中,这个函数可以被调用来获得总和,而函数调用者不需要理解这个函数是通过函数编程实现的。 我已经实现了以下内容,但它似乎过于复杂

  • 如何过滤<代码>地图 仅当列表中的任何员工具有字段值性别=“M”时,我才必须过滤。 输入: