Java 我可以显式地键入一个不明确的方法调用并使用它吗?
我肯定这在什么地方得到了回答,但我没有足够好的搜索词来找到它。我正在使用io.vavr.control.Try包,当我尝试对结果流中的元素使用GetOrelsThrow方法时,该方法与io.vavr.Value类不明确。我可以指定我想用哪种方法吗,还是不可能Java 我可以显式地键入一个不明确的方法调用并使用它吗?,java,vavr,Java,Vavr,我肯定这在什么地方得到了回答,但我没有足够好的搜索词来找到它。我正在使用io.vavr.control.Try包,当我尝试对结果流中的元素使用GetOrelsThrow方法时,该方法与io.vavr.Value类不明确。我可以指定我想用哪种方法吗,还是不可能 您可以将NotFoundException::new替换为只与函数参数匹配的t->new NotFoundException(t)。由于您没有发布完整的代码,我只能对NotFoundException的外观进行有根据的猜测,但我认为它至少包
您可以将
NotFoundException::new
替换为只与函数参数匹配的t->new NotFoundException(t)
。由于您没有发布完整的代码,我只能对NotFoundException
的外观进行有根据的猜测,但我认为它至少包含以下形式的两个构造函数:
public NotFoundException() {}
public NotFoundException(Throwable cause) {
super(cause);
}
如果要将构造函数方法引用与Try.getorelsetrow
一起使用,则需要通过删除其中一个构造函数(或潜在地降低可见性)来消除方法引用的不确定性,或者使用lambdas来构造生成的throwable
如果您不能或不想更改NotFoundException
类,您可以返回使用lambda而不是方法引用(1和2),或者您可以借助vavr函数类型工厂方法创建显式函数
(2)或消费者
(3)实例:
rsp.getOrElseThrow(cause -> new NotFoundException(cause)); // (1)
rsp.getOrElseThrow(() -> new NotFoundException()); // (2)
rsp.getOrElseThrow(Function1.of(NotFoundException::new)); // (3)
rsp.getOrElseThrow(Function0.of(NotFoundException::new)); // (4)
您有许多选择:
- 将显式强制转换添加到所需类型:
.map(rsp -> rsp.getOrElseThrow((Supplier<NotFoundException>) NotFoundException::new)) .map(rsp -> rsp.getOrElseThrow((Function<? super Throwable, NotFoundException>) NotFoundException::new))
- 使用外部lambda参数的显式类型:
.map((Value<…> rsp) -> rsp.getOrElseThrow(NotFoundException::new)) .map((Try<…> rsp) -> rsp.getOrElseThrow(NotFoundException::new))
.map((值rsp)->rsp.getorelsetrow(NotFoundException::new)) .map((尝试rsp)->rsp.getorelsetrow(NotFoundException::new))
.map((Value<…> rsp) -> rsp.getOrElseThrow(NotFoundException::new))
.map((Try<…> rsp) -> rsp.getOrElseThrow(NotFoundException::new))