【问题标题】:Method to return function with generics使用泛型返回函数的方法
【发布时间】:2022-01-15 08:42:56
【问题描述】:
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&lt;Object&gt;,但它正在接收 Optional&lt;LocalDate&gt;

另外,有没有办法使用泛型声明一个函数而不从方法中返回它?

编辑:为了完整起见,我们只说 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));
    }

【问题讨论】:

  • 详情请提供完整代码。
  • @MajidHajibaba 我为toDateOfInjury 添加了一个替代功能。 Bill 只是一个 dto。

标签: java function generics


【解决方案1】:

看到这个答案:Calling static generic methods

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

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

但是你面临其他需要解决的问题。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多