Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将映射传递给指定具有无限通配符的映射参数的函数_Java_Generics - Fatal编程技术网

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

我基本上是在用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 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