[英]Cannot resolve method when using consumer
我有一個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);
坦率地說,我認為您是在濫用消費者,而且一個好的老式嘗試擋塊會使事情更容易閱讀。 當您無法從InputStream讀取時,UnsupportedOperationException也不是要加載的正確異常。 UncheckedIOException將更加整潔。 您的使用者還捕獲了它不應該捕獲的異常(例如NullPointerException或OutOfMemoryError等),甚至沒有鏈接到原始原因,這使得在運行時很難診斷問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.