gpt4 book ai didi

Java8 方法引用和泛型,某些情况下需要类型转换

转载 作者:行者123 更新时间:2023-11-30 10:25:59 25 4
gpt4 key购买 nike

我正在尝试处理 Java8 方法引用并遇到非常奇怪的编译错误。

我有一个包含对象值的映射,我想为用户提供对值应用一些函数的功能。

所以我使用了以映射键和功能接口(interface)为参数的泛型方法

我想知道为什么我不需要将方法引用转换为精确的实数类型(在修剪的情况下)

import java.util.HashMap;
import java.util.Map;
import java.util.function.UnaryOperator;

public class ReferenceDiscovering {

Map<String, Object> values = new HashMap<>();

public static void main(String[] args) {
ReferenceDiscovering main = new ReferenceDiscovering();
main.values.put("key1", " some text with space in start");
main.values.put("key2", "AAAAAAAAAAAAAA");

System.out.println(main.values);

main.applyFunctionByKey("key1", String::trim);
// cannot resolve method toLowerCase
// COMPILE ERROR HERE. WHY???? WHY NOT FOR trim?
// main.applyFunctionByKey("key2", String::toLowerCase);
main.applyFunctionByKey("key2", (UnaryOperator<String>)String::toLowerCase);


System.out.println(main.values);
}

private <T> void applyFunctionByKey(String key, UnaryOperator<T> binaryOperator) {
if (values.containsKey(key)) {
values.put(key, binaryOperator.apply((T)values.get(key)));
}
}
}

结果:

{key1= some text with space in start, key2=AAAAAAAAAAAAAA} {key1=some text with space in start, key2=aaaaaaaaaaaaaa}

最佳答案

问题的评论中已经给出了答案 - 是的,问题是 Java 无法决定应该使用 String 类中的哪个方法(有两个 - 一个没有参数,第二个使用语言环境)。

这也与方法类型参数的推断有关。在提供的代码上下文中,JRE 无法执行此操作。

另见:

关于Java8 方法引用和泛型,某些情况下需要类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45885776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com