Java函数泛型

Java functional generics

本问题已经有最佳答案,请猛点这里访问。

映射的ComputeFabSent方法具有以下声明:

computeIfAbsent(K key, Function mappingFunction)

当k和v类型不在其他地方使用时,为什么不将参数声明为Function

现在我知道k和v非常重要,它们是map类声明的一部分。


简单的例子:

1
2
3
Map<String,Object> myMap = ...
Function<Object,String> myFunc = Object::toString;
myMap.computeIfAbsent("42", myFunc);

这是可接受的吗?

好的,Functionmyfunc是给定的类型,和我们有一个Map,这听起来像有一个问题。它肯定不会,如果你只接受Function编译。

但当你看它的接近,有没有什么错的。不仅是demonstrably工作的代码,它是易于"42"湖:为什么它是String实例,它有一toString()方法。一个方法是String归来,在Object学院。这当然很好。

这是一个"细"表达的是什么Function尼斯。


KV是部分类型的映射功能。所以他们是实际使用。特别是,他们确定的可接受的和最通用的激活参数类型和返回类型的映射功能。

for

1
Function<? super K,? extends V> mappingFunction

这意味着你可以通任何功能,是能够映射到至少都可以作为一个关键的地图和地图制作? super K)到这些键的值可以到地图(extends V(看跌)。这给你更多的灵活性,在效果中选择的映射功能。

在理论方面:在更多的子函数在其参数是表征逆变和协变返回类型其类型。本determines类型有关。当mappingFunctionFunctionMapas a function to VK