我基本上是在尝试检查Java中的private boolean isValid(Map<?,?> map) {
return (null != map && map.size() > 0);
}
。我的代码如下。
Map<String, String> m = new HashMap<>();
isValid(m);
为什么我不能按如下方式使用此方法?
The method isValid(Map<?,?>) in the type MyClazz is not applicable for the arguments (Map<String,String>)
在Eclipse中,我收到以下错误消息:
isValid( (Map<?,?>) m);
当我写这个问题时,我尝试了以下内容并且“有效”。
[
{"completed":false},
{"completed":false},
{"completed":false},
{"completed":true,"score":1,"answerList":["1"],"QuestionId":75,"startTime":"2016-01-09T16:40:06.153Z","clickNb":1,"endTime":"2016-01-09T16:40:07.844Z"},
{"completed":true,"score":1,"answerList":["1"],"QuestionId":76,"startTime":"2016-01-09T16:40:08.487Z","clickNb":1,"endTime":"2016-01-09T16:40:12.482Z"},
{"completed":true,"score":1,"answerList":["1"],"QuestionId":77,"startTime":"2016-01-09T16:40:13.042Z","clickNb":1,"endTime":"2016-01-09T16:40:17.689Z"}
]
这是为什么?翻阅SO帖子,我遇到了一个“类似”问题,说明了通配符捕获的问题。但这似乎不是这里的问题(没有铸造)。
答案 0 :(得分:0)
您在Java 8的javac
或Eclipse Mars中提供的示例不会发生此错误。您可以尝试刷新项目或清理项目(项目&gt;清理...),否则您的示例不会复制您的实际问题。
一种可能性是您要导入其他Map
而不是java.util.Map
。
此示例编译没有问题,包括javac
和Eclipse。
$ cat Demo.java
import java.util.*;
class Demo {
// isEmpty() is a better way to check if a Map is empty rather
// than .size() > 0, which is O(n) for some Map implementations.
public static boolean nonEmpty(Map<?,?> map) {
return map != null && !map.isEmpty();
}
public static boolean nonZero(Map<?,?> map) {
return null != map && map.size() > 0;
}
public static void main(String[] args) {
nonEmpty(new HashMap<String, String>());
nonZero(new HashMap<String, String>());
}
}
$ javac Demo.java; echo $?
0