我将数据从//CREATE EVENT
gp = 4;
gamepad_set_axis_deadzone(gp,0.5)
spd = 8;
//STEP EVENT
x += gamepad_axis_value(gp,gp_axislh) * spd;
y += gamepad_axis_value(gp,gp_axislv) * spd;
复制到名为 datamap 的另一个相同类型的hashmap,并发生此错误
HashMap<Class<? extends NXPersistentDataInt>, HashMap<Integer, ? extends NXPersistentDataInt>>
在integerEntry.getValue()
IDE说: for (Map.Entry<String, AnalysisTaskDataobj> stringAnalysisTaskDataobjEntry : getTaskDataobjs().entrySet()) {
HashMap<Class<? extends NXPersistentDataInt>, HashMap<Integer, ? extends NXPersistentDataInt>> hashMap = stringAnalysisTaskDataobjEntry.getValue().getDataMap();
for (Map.Entry<Class<? extends NXPersistentDataInt>, HashMap<Integer, ? extends NXPersistentDataInt>> classHashMapEntry : hashMap.entrySet()) {
datamap.putIfAbsent(classHashMapEntry.getKey(), new HashMap<>());
for (Map.Entry<Integer, ? extends NXPersistentDataInt> integerEntry : classHashMapEntry.getValue().entrySet()) {
HashMap<Integer, ? extends NXPersistentDataInt> integerHashMap = datamap.get(classHashMapEntry.getKey());
integerHashMap.put(integerEntry.getKey(), integerEntry.getValue());
}
}
}
答案 0 :(得分:0)
首先要做的事情。这不是IDE错误......
嗯,你不能这样做。答案就在这里:https://stackoverflow.com/a/2777297/3798111
正如您所看到的,您违反了某些规则,请考虑以下内容:
abstract class Super {
}
class Child1 extends Super {
}
class Child2 extends Super {
}
private static List<? extends Super> myList;
public static void main(String[] args) {
myList.add(new Child1());
myList.add(new Child2());
}
我使用了List
,但Map
确定相同吗?当我们使用捕获时,我们无法知道List
本身的正确实现。因此,如果您在Child1
内添加一个假设的ArrayList<Child2>
实例,并且编译器和IDE可以确保您正确地执行此操作,则会出现错误。
在我发送的链接中有更好的解释。但我会给你一个解决方法,但我真的不鼓励它的使用......那说,抓住它:
static abstract class Super {
public String saySomething() {
return "I'm Super";
}
}
static class Child1 extends Super {
@Override
public String saySomething() {
return "I'm Child1";
}
}
static class Child2 extends Super {
@Override
public String saySomething() {
return "I like coffee!";
}
}
private static List<? extends Super> myList;
public static void main(String[] args) {
myList = new ArrayList<>();
addSomeData(myList, new Child1());
addSomeData(myList, new Child2());
myList.forEach(element -> System.out.println(element.saySomething()));
}
public static void addSomeData(List someList, Object data) {
someList.add(data);
}
请注意,我没有强制使用param someList
类型。
如上所述,JAVA很棘手,所以你可以用它来做很多事情。我不希望你用你的Map
来做这件事,但是在现实世界中我们知道......有时候......有一段时间......我们做了一些sh *。所以随意使用(不要说你认识我)