gpt4 book ai didi

java - 使用消费者时无法解析方法

转载 作者:行者123 更新时间:2023-12-01 19:37:29 26 4
gpt4 key购买 nike

我有一个加载属性文件的InputStream。通常我使用properties.load(is);但我想将其更改为 Consumer,因为我想避免使用 catch,因此我创建了一个避免 id 的 ThrowingConsumer,但问题是,即使我使用普通 Consumer,当我声明它将是一个 InputStream 时,它似乎仍在工作,但我的 ThrowingConsumer 是通用的,所以看起来像这样

@FunctionalInterface
public interface ThrowingConsumer<T, E extends Throwable>
{
void accept(T t) throws E;

static <T, E extends Throwable> Consumer<T> unchecked(ThrowingConsumer<T, E> consumer)
{
return t ->
{
try
{
consumer.accept(t);
}
catch (Throwable e)
{
throw new UnsupportedOperationException(e);
}
};
}
}

当我使用ThrowingConsumer.unchecked(properties::load).accept(is);时它尖叫着无法解析方法负载。我怎样才能避免它?

最佳答案

load() 方法已重载,因此推理无法在两个重载之间进行选择。

使用 lambda:

ThrowingConsumer.unchecked((InputStream i) -> properties.load(i)).accept(is);

或者将你的方法引用转换为正确的类型:

ThrowingConsumer.unchecked((ThrowingConsumer<InputStream, IOException>) properties::load).accept(is);

坦率地说,我认为你在这里滥用消费者,而一个好的旧的 try catch block 会让事情变得更容易阅读。当您无法从 InputStream 读取数据时,UnsupportedOperationException 也根本不是正确加载的异常。 UncheckedIOException 会干净得多。而且您的消费者还会捕获不应该捕获的异常(例如 NullPointerException 或 OutOfMemoryError 等),甚至没有链接原始原因,这使得在运行时诊断问题变得非常困难。

关于java - 使用消费者时无法解析方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com