使用泛型 return 函数的方法

Method to return function with generics

static <R> Function<Optional<R>,Function<R, Optional<String>>> checkPresence(String err){
        return ro -> r -> ro.map(x -> emptyStrOpt.get())
                            .orElseGet(() -> Optional.of(err));
}
//toDateOfInjury is Function<Bill,LocalDate>

static final Function<Bill,Optional<String>> dateOfInjuryNotNull = b ->
            toDateOfInjury.andThen(
                    o -> checkPresence("No date of injury").apply(o).apply(b));

IntelliJ 抱怨说对于 o,它期望 Optional<Object> 但它正在接收 Optional<LocalDate>.

此外,有没有什么方法可以使用泛型声明函数而不从方法返回它?

编辑:为了完整起见,我们只说 toDateOfInjury 是

Function<Bill,Optional<LocalDate>> toDateOfInjury = b -> Optional.ofNullable(LocalDate.now()); //though it map to empty optional too of course

EDIT2:解决了第一个问题后,我这样修复了它:

static final Function<Bill,Optional<String>> dateOfInjuryNotNull2 = b ->
            toDateOfInjury.andThen(
                    o -> EventValidationUtils.<LocalDate>checkPresence("No date of injury").apply(o)).apply(b);

    static <R> Function<Optional<R>,Optional<String>> checkPresence(String err){
        return ro -> ro.map(x -> emptyStrOpt.get())
                            .orElseGet(() -> Optional.of(err));
    }

看到这个答案:Calling static generic methods

调用泛型方法时需要指定泛型类型(这里是LocaleDate)。在您的方法调用中,它不能指定方法类型,因此将其继承为 Object。所以你需要像下面这样指定它(假设 Test 是你的 class 名称):

static final Function<Bill,Optional<String>> dateOfInjuryNotNull = b ->
            toDateOfInjury.andThen(
                    o -> Test.<LocalDate>checkPresence("No date of injury").apply(o).apply(b));

但是您还面临其他问题需要解决。