2 回答

TA貢獻1993條經(jīng)驗 獲得超6個贊
傳遞Supplier給orElseThrow應(yīng)該返回構(gòu)造的異常,該異常與該方法的通用簽名相關(guān),該方法聲明拋出供應(yīng)商返回的內(nèi)容。由于您的供應(yīng)商沒有返回值,JDK 8javac推斷Throwable并要求調(diào)用者orElseThrow處理它。較新的編譯器可以在這種情況下方便地進行推斷RuntimeException,并且不會產(chǎn)生錯誤。
不過,正確的用法是
protected String sendTemplate1() {
? ? String template = getTemplate();
? ? return Optional.ofNullable(template)
? ? ? ? .orElseThrow(() -> new NullPointerException("message"));
}
但這是對Optionalanyway 的過度使用。你應(yīng)該簡單地使用
protected String sendTemplate() {
? ? return Objects.requireNonNull(getTemplate(), "message");
}
見requireNonNull(T, String)
和requireNonNull(T, Supplier<String>)
。

TA貢獻1155條經(jīng)驗 獲得超0個贊
改變這個
protected String sendTemplate() {
? ? String template = getTemplate();
? ? return Optional.ofNullable(template).orElseThrow(() -> {
? ? ? ? throw new NullPointerException("message");
? ? });
}
這樣:
protected String sendTemplate() {
? ? String template = getTemplate();
? ? return Optional.ofNullable(template).orElseThrow(() -> {
? ? ? ? return new NullPointerException("message"); // <--- RETURN here
? ? });
}
方法orElseThrow()需要一個供應(yīng)商(即創(chuàng)建異常的東西)。你不能拋出異常,只是創(chuàng)建它。
添加回答
舉報