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
。