如何在lambda表达式(JAVA)中使用try-catch?
我必须使用lambda表达式。在本例中,try块使用输入字符串创建一个JSON对象。但是我必须实现这一点,如果创建不起作用,它应该返回一个如何在lambda表达式(JAVA)中使用try-catch?,java,class,lambda,expression,optional,Java,Class,Lambda,Expression,Optional,我必须使用lambda表达式。在本例中,try块使用输入字符串创建一个JSON对象。但是我必须实现这一点,如果创建不起作用,它应该返回一个可选的.Empty(),而不是null。 我该怎么做? 在当前情况下,工作流将停止,直到捕获发生。因此,其他字符串被忽略 private Optional<JSONObject> testFile (Optional<String> jsonFileContent) { try { return jso
可选的.Empty()
,而不是null
。
我该怎么做?
在当前情况下,工作流将停止,直到捕获发生。因此,其他字符串被忽略
private Optional<JSONObject> testFile (Optional<String> jsonFileContent)
{
try
{
return jsonFileContent.map(fileContent -> new JSONObject(jsonFileContent)); // this lambda expression needs to be extended
}
catch(Exception e)
{
return null;
}
}
private可选测试文件(可选jsonFileContent)
{
尝试
{
返回jsonFileContent.map(fileContent->newjsonobject(jsonFileContent));//这个lambda表达式需要扩展
}
捕获(例外e)
{
返回null;
}
}
您可以编写一个方法来创建
新的JSONObject(jsonFileContent)
您将在try-with-catch中将逻辑封装在方法中,如果发生异常,将返回null
实际上,在调用map之后,您可以先执行filter,然后执行findFirst,它为null,并作为findFirst返回可选值
将根据需要返回一个空的可选项 private可选测试文件(可选jsonFileContent)
private Optional<JSONObject> testFile (Optional<String> jsonFileContent)
{
try{
return jsonFileContent.map(fileContent -> a(fileContent));
}
catch(Exceptione)
{
return null;
}
Optional a(Optional<String> jsonFileContent) {
try{
return new JSONObject(jsonFileContent); // this lambda expression needs to be extended
} catch (Exception e) {
return Optional.empty();
}
}
{
试一试{
返回jsonFileContent.map(fileContent->a(fileContent));
}
捕获(例外一)
{
返回null;
}
可选a(可选jsonFileContent){
试一试{
返回新的JSONObject(jsonFileContent);//此lambda表达式需要扩展
}捕获(例外e){
返回可选的.empty();
}
}
这不是处理错误的好方法,因为:
- 如果出现问题,您和调用代码的任何人都不知道操作失败的原因
- 你会告诉最终用户什么?“出了点问题,但我们不知道是什么,所以你对此无能为力,也不要费心告诉我们”
private Optional<JSONObject> testFile(Optional<String> jsonFileContent)
throws JSONException
{
if (jsonFileContent.isPresent())
{
return Optional.of(new JSONObject(jsonFileContent.get()));
}
else
{
return Optional.empty();
}
}
private可选测试文件(可选jsonFileContent)
抛出JSONException
{
if(jsonFileContent.isPresent())
{
返回可选的.of(新的JSONObject(jsonFileContent.get());
}
其他的
{
返回可选的.empty();
}
}
关于捕获异常的注意事项:
Java SE中从RuntimeException派生的大多数类都表示程序员错误。示例如下:
- NullPointerException
- IndexOutOfBoundsException
- 非法辩论例外
catch(Exception…
或catch(RuntimeException…
。如果必须编写catch
块,则只捕获绝对需要捕获的异常
但是更好的选择是不捕获任何内容,并使用
声明您的方法抛出JSONException
从不从声明为返回可选的方法返回null
,而是返回可选的.empty()
。