ラムダメソッドrefrenceを渡すときにエラーが発生し、型に互換性がありません。FUnctional Interfaceメソッドを呼び出している間、コードは完全に正常にコンパイルされ、Concreteオブジェクトに置き換えられます。メソッド参照を渡す間、タイプの非互換性をスローします。私の誤解を解いてください
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は、インターフェース定義の一部ではなくメソッド定義の一部であるため、正しいタイプをチェックできません。次の調整を使用して機能します。
public interface ParsingFileFunction<K, T> {
K getMessage(T inputMessage);
}
タイプがインターフェース定義に移動されていることに注意してください。
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
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加