Java 将映射传递给指定具有无限通配符的映射参数的函数
我基本上是在用Java检查Java 将映射传递给指定具有无限通配符的映射参数的函数,java,generics,Java,Generics,我基本上是在用Java检查Map。我的代码如下 private boolean isValid(Map<?,?> map) { return (null != map && map.size() > 0); } 私有布尔值有效(映射){ 返回值(null!=map&&map.size()>0); } 为什么我不能按如下方式使用此方法 Map<String, String> m = new HashMap<>(); isValid(m
Map
。我的代码如下
private boolean isValid(Map<?,?> map) {
return (null != map && map.size() > 0);
}
私有布尔值有效(映射){
返回值(null!=map&&map.size()>0);
}
为什么我不能按如下方式使用此方法
Map<String, String> m = new HashMap<>();
isValid(m);
Map m=newhashmap();
有效期(m);
在Eclipse中,我收到以下错误消息:
MyClazz类型中的方法isValid(Map)不适用于参数(Map)
当我写这个问题时,我尝试了以下方法,它“有效”
isValid((Map)m);
为什么会这样?翻阅SO帖子,我发现了一个“类似”的问题,即通配符捕获问题。但这似乎不是这里的问题(没有铸造) 您在Java8的
javac
或EclipseMars中提供的示例不会出现此错误。您可以尝试刷新项目或清理项目(项目>清理…),但您的示例不会复制您的实际问题
一种可能性是,您正在导入的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
$cat Demo.java
导入java.util.*;
课堂演示{
//isEmpty()是检查映射是否为空的更好方法
//大于.size()>0,对于某些映射实现,这是O(n)。
公共静态布尔非空(映射){
return map!=null&!map.isEmpty();
}
公共静态布尔非零(映射){
返回null!=map&&map.size()>0;
}
公共静态void main(字符串[]args){
非空(新HashMap());
非零(新HashMap());
}
}
$javac Demo.java;回声$?
0
您使用哪个Eclipse版本?这应该可以编译(虽然不是很好的代码),而且它确实是用Eclipse Mars 4.5.1(刚刚测试过)编译的。为什么不使用isValid(Map-Map)呢?@Leo:那会使用原始类型,而原始类型是不好的。这对我来说非常好。你使用的是旧版本的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