我有以下几点:

class Foo implements Inter {
    void doSomething();
}

Optional<Inter> getPossible() {
    Optional<Foo> possible = ...;
    possible.ifPresent(Foo::doSomething);
    return possible.map(f -> f);
}
getPossible需要返回Optional<Inter>,因为它覆盖了父类(super class)的实现。

该方法末尾的那个映射纯粹是为了转换类型。还有更优雅的选择吗?

最佳答案

为了使您仅需要强制转换,可以将Class::cast与.map一起使用:

class Foo implements Inter {
    void doSomething();
}

Optional<Inter> getPossible() {
    Optional<Foo> possible = ...;
    possible.ifPresent(Foo::doSomething);
    return possible.map(Inter.class::cast);
}

09-28 05:28