Java 8,流过滤器,反射,NoSuchMethodException [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8,流过滤器,反射,NoSuchMethodException [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有这个代码
List<JComponent> myList = new ArrayList<>();
fillmyList(myList); //Some method filling the list
try{
menuList.stream()
.filter(m->m.getClass().getMethod("setFont", new Class[]{Font.class}) != null) //unreported exception NoSuchMethodException; must be caught or declared to be thrown
.forEach(m -> m.setFont(someFont));
}
catch (NullPointerException | NoSuchMethodException e) {} //exception NoSuchMethodException is never thrown in body of corresponding try statement
但是,我有这个错误消息:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - exception java.lang.NoSuchMethodException is never thrown in body of corresponding try statement
怎么解决这个?
答案
它不是例外,而是编译错误。 你必须捕获可能抛出异常的lambda体,而不是整个流。
这是一个在false
中返回filter()
的示例,用于抛出异常的流的元素:
myList.stream()
.filter(m -> {
try {
return m.getClass()
.getMethod("setFont", new Class[] { Font.class }) != null;
} catch (NoSuchMethodException | SecurityException e) {
// log the exception
return false;
}
})
您当然可以使用不同的策略来抛出RuntimeException并停止处理。
以上是关于Java 8,流过滤器,反射,NoSuchMethodException [重复]的主要内容,如果未能解决你的问题,请参考以下文章