K k是什么和V v的意思是Map.Class中的Java方法吗?

rdlzhqv9  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(215)

我是Java新手,正在查看Java中Map.class中的forEach方法......下面是该方法的摘录:

default void forEach(BiConsumer<? super K, ? super V> action) {
    Objects.requireNonNull(action);
    for (Map.Entry<K, V> entry : entrySet()) {
        K k;
        V v;
        //more code follows...

我的问题是... K K到底是怎么回事;这个方法继续使用k和v作为局部变量,所以我猜是Kk;和V v;行将参数赋给局部变量...但是如果这是真的,为什么这个语法不需要类型呢?提前感谢你的帮助。
我没有尝试任何东西或期望任何东西...只是想更好地了解这段代码在做什么。

kokeuurv

kokeuurv1#

即使理解什么是泛型,单凭这段代码也不是很清楚。
因此,您需要查看Map接口声明的顶部

public interface Map<K,V>

另请阅读:

cgvd09ve

cgvd09ve2#

Map<K, V>是一个 * 参数化类型 *,这意味着它表示一个不同类型的完整系列,例如

  • Map<String, Integer>- a Map,其中键为String s,值为Integer s
  • Map<Integer, LocalDate>- a Map,其中键为Integer s,值为LocalDate s

等等,但是所有这些类型都有一种相同之处--它们都是Map,其中键有某种类型,值有某种类型。
现在,Map内部的处理过程基本相同,无论其键的类型或值的类型如何,因此Map.class内部的代码都不应指定这些类型,而是使用K来表示键的类型。和V来表示值的类型。这些字母称为 * 类型参数 *,在Map.class中使用它们来表示将在Map中使用的类型。
例如,如果您有一个Map<String, Integer>,那么K表示StringV表示Integer;如果您有一个具有不同键类型和值类型的Map,那么KV将表示其他内容。
在你的问题中所展示的方法中,k是一个由K表示的类型的局部变量,v是一个由V表示的类型的局部变量。同样,如果你有一个Map<String, Integer>k实际上是一个String变量,而v是一个变量,但实际上可以是任何类型。
在编写//more code follows...的地方,所讨论的代码只是从Map中取出一个键和一个值,将变量kv指向它们,然后将称为actionBiConsumer应用于它们。

相关问题