gpt4 book ai didi

Java Lambda 方法引用 - 需要清楚

转载 作者:行者123 更新时间:2023-12-03 07:37:21 25 4
gpt4 key购买 nike

我在传递 lambda 方法引用时遇到错误,类型不兼容。
在调用 FUnctional Interface 方法时,代码编译得非常好并替换了具体对象。虽然传递方法引用它抛出类型不兼容。请解开我的误解

public interface ParsingFileFunction {
public <K,T> K getMessage(T inputMessage);
}

public class FileUtility {
public static Messages readMessage(File kingMesaages){
//some process here
return messages; //of Messages type
}
}
public class SomeController{
@Autowired
SomeService someService;
public void parse(File kingMessage) {
//compiler error -- The type FileUtility does not define readMessage(T) that is applicable here
Messages kingdomMessages = someService.getMessage(FileUtility::readMessage,kingMessage);
}
}

@Service
public class SomeService{
public Messages getMessage(ParsingFileFunction parse,File file) {
//this compiles perfectly fine as expected
return parse.getMessage(file);
}
}

最佳答案

Java 无法检查正确的类型,因为它们不是接口(interface)定义的一部分,而是方法定义的一部分。它使用以下调整工作:
ParsingFileFunction.java

public interface ParsingFileFunction<K, T> {
K getMessage(T inputMessage);
}
请注意,类型已移至接口(interface)定义。
SomeService.java
import org.springframework.stereotype.Service;

import java.io.File;

@Service
public class SomeService {

public Messages getMessage(ParsingFileFunction<Messages, File> parse, File file) {
return parse.getMessage(file);
}
}
注意 file 声明中的显式类型.

关于Java Lambda 方法引用 - 需要清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64676717/

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