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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

地图中的 Java 8 流过滤器地图 -- Map<String,Map<String,Employee>>

具有任何匹配属性的对象的 JAVA 8 过滤器列表

流过滤器返回 null findFirst 获取异常

cuda中的流过滤器

基于另一个列表的 1 个列表的流过滤器

基于另一个列表的 1 个列表的流过滤器