Java 使用「;抛出;回调上的关键字

Java 使用「;抛出;回调上的关键字,java,throws,jwnl,Java,Throws,Jwnl,在下面的方法中,我在流的.anyMatch()方法的回调中使用net.sf.extJWNL包中的一个方法。但是,我使用的方法抛出了一个JWNLException。我想使用JWNLException的throws关键字来代替当前的try-catch块 Dictionary d = Dictionary.getDefaultResourceInstance(); List<POS> POSList = new ArrayList<POS>(EnumSet.allOf

在下面的方法中,我在
流的
.anyMatch()
方法的回调中使用
net.sf.extJWNL
包中的一个方法。但是,我使用的方法抛出了一个
JWNLException
。我想使用
JWNLException
throws
关键字来代替当前的try-catch块

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;
    }
});
Dictionary d=Dictionary.getDefaultResourceInstance();
列表POSList=
新的ArrayList(EnumSet.allOf(POS.class));
布尔值isWord=POSList.stream().anyMatch(c->{
试一试{
返回d.getIndexWord(c,word)!=null;
}捕获(JWNLException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
返回true;
}
});

另外,我不能将其移动到单独的方法,因为我需要此方法中的局部变量-
d
word
(参数)

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

请参考下面的链接


抛出
仅用于方法签名。您可能希望将lambda的主体移动到私有方法,但不希望在该方法的声明上使用
throws
,因为这将通过强制lambda保留try/catch块来克服这一点。(另外,您不需要ArrayList;EnumSet有自己的
stream()
方法,就像所有集合一样。)您是说我可以完全删除第2行并用POS.stream()替换POSList.stream()吗?这将返回一个错误,我是说您可以编写
Collection POSList=EnumSet.allOf(POS.class)。但是,您应该遵循Java命名约定:变量名应该用camelCase编写。@Marvin不,它们不是。他们明确地说变量名总是以小写字母开头,而且他们根本没有提到最初的书写方式。普遍接受的处理方法是将首字母缩略词视为普通词
XMLHTTPParser
变为
XMLHTTPParser
POS
变为
POS
(参见有效Java)。对于变量名,第一个字母随后转换为小写:例如
xmlHttpParser
pos