使用泛型 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));
但是您还面临其他问题需要解决。
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));
但是您还面临其他问题需要解决。