【问题标题】:Use "throws" keyword on callback在回调中使用“throws”关键字
【发布时间】:2019-08-28 20:51:29
【问题描述】:

在我下面的方法中,我在Stream<Object>.anyMatch()方法的回调中使用了net.sf.extJWNL包中的一个方法。但是,我使用的方法抛出了JWNLException。而不是当前的 try-catch 块,我想使用 throws 关键字作为 JWNLException

Dictionary d = Dictionary.getDefaultResourceInstance();
List<POS> POSList =
     new ArrayList<POS>(EnumSet.allOf(POS.class));
boolean isWord = POSList.stream().anyMatch(c -> {
    try {
        return d.getIndexWord(c, word) != null;
    } catch (JWNLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return true;
    }
});

此外,我无法将其移至单独的方法,因为我需要此方法中的局部变量 - dword(参数)

【问题讨论】:

  • throws 仅用于方法签名。您可能希望将 lambda 的主体移动到私有方法,但您不希望在该方法的声明中使用 throws,因为这会通过强制您的 lambda 保留 try/catch 块来破坏这一点。 (此外,您不需要 ArrayList;EnumSet 有自己的 stream() 方法,所有 Collections 也是如此。)
  • 你是说我可以完全删除第 2 行并用 POS.stream() 替换 POSList.stream() 吗?这会返回一个错误
  • 我是说你可以写Collection&lt;POS&gt; POSList = EnumSet.allOf(POS.class);
  • 不过,您应该遵循 Java 命名约定:变量名应该用驼峰命名。
  • @Marvin 不,他们没有。 他们明确说变量名总是以小写开头,他们根本没有提及原始写作。处理此问题的普遍接受的方法是将首字母缩略词视为普通单词。 XMLHTTPParser 变为 XmlHttpParserPOS 变为 Pos(请参阅Effective Java)。对于变量名,第一个字母然后转换为小写:例如xmlHttpParserpos.

标签: java throws jwnl


【解决方案1】:

您可能需要围绕 lambda 表达式创建一个包装器,该包装器将处理从一段代码中抛出的异常。

请参考以下链接

https://www.baeldung.com/java-lambda-exceptions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2018-06-18
    • 2019-10-11
    • 2011-08-09
    相关资源
    最近更新 更多