Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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_Collections_Hashmap - Fatal编程技术网

在Java集合中映射<;键,>;什么是&引用;提到

在Java集合中映射<;键,>;什么是&引用;提到,java,generics,collections,hashmap,Java,Generics,Collections,Hashmap,在Java集合中,我看到了如下内容:Map。 我不知道它是如何工作的,有人能帮我解决这个问题或提供一个例子吗?问号(?)表示未知类型 在您的示例中,Map,意味着它将匹配包含任何类型值的映射。它并不意味着您可以创建映射并在其中插入任何类型的值 引述: 在泛型代码中,被称为通配符的问号(?)表示未知类型。通配符可用于多种情况:作为参数、字段或局部变量的类型;有时作为返回类型(尽管更具体一些是更好的编程实践)。通配符永远不会用作泛型方法调用、泛型类实例创建或超类型的类型参数 例如,假设您要创建一个函

在Java集合中,我看到了如下内容:
Map
。 我不知道它是如何工作的,有人能帮我解决这个问题或提供一个例子吗?

问号(?)表示未知类型

在您的示例中,
Map
,意味着它将匹配包含任何类型值的映射。它并不意味着您可以创建
映射
并在其中插入任何类型的值

引述:

在泛型代码中,被称为通配符的问号(?)表示未知类型。通配符可用于多种情况:作为参数、字段或局部变量的类型;有时作为返回类型(尽管更具体一些是更好的编程实践)。通配符永远不会用作泛型方法调用、泛型类实例创建或超类型的类型参数

例如,假设您要创建一个函数,该函数将打印任何映射的值,而不考虑值类型:

static void printMapValues(Map<String, ?> myMap) {
    for (Object value : myMap.values()) {
        System.out.print(value + " ");
    }
}
通配符允许您调用相同的函数,将
映射
或任何其他值类型作为参数传递:

Map<String, Integer> myIntMap = new HashMap<>();
myIntMap.put("a", 1);
myIntMap.put("b", 2);
printMapValues(myIntMap);
Map<String, String> myStrMap = new HashMap<>();
myStrMap.put("a", "one");
myStrMap.put("b", "two");
printMapValues(myStrMap);
此通配符称为无界,因为它不提供有关类型的信息。有两种情况可能需要使用无界通配符:

  • 如果除了在
    对象
    类中定义的方法之外,没有调用任何方法
  • 使用不依赖于类型参数的方法时,例如
    Map.size()
    List.clear()
通配符可以是无界、上界或下界:

  • List
    是一个无界通配符的示例。它表示未知类型的元素列表

  • 列出未知的通配符
    
    可以是任何数据类型

    列表
    是指键入未知类型的列表,可以是
    列表
    列表
    列表


    现在来看您的示例
    Map
    意味着要插入到此Map中的
    Value
    可以是任何数据类型。

    非常感谢您的解释和示例!
    Map<String, String> myStrMap = new HashMap<>();
    myStrMap.put("a", "one");
    myStrMap.put("b", "two");
    printMapValues(myStrMap);
    
    one two