所以我写了一个看起来像这样的代码:
public ClassA myMethod(param1) {
ClassB myObject;
//START of code block #1
try {
myObject = tryToGetObject(param1);
if (myObject == null) {
return new ClassA("it's null");
}
} catch (ParamNotValidException e) {
return new ClassA("param1 is not valid");
}
//END of code block #1
/**
Here do a lot of things with myObject
*/
return new classA(myObject.toString());
}
问题是,我有很多与code block #1
类似的代码,我想重构所有这些代码。问题在于此代码块可以返回:
myObject
,稍后将使用它构建一个ClassA
对象以返回OR
ClassA
对象。NB:
ClassB
id 不是 ClassA
ClassA
构造函数参数,但实际代码未使用Strings。 我想得到的东西种类像这样:
public ClassA method(param1) {
ClassB myObject;
//START of code block #1
getMyObjectOrReturnClassAObject();
//END of code block #1
/**
Here do a lot of things with myObject
*/
return new classA(myObject.toString());
}
我试图研究Java Optional
,但不确定在这里是否以及如何使用它。
一些需要澄清的上下文:
这段代码是关于返回Java Play Result
的。例如,当用户使用公开的API请求特定对象时,它将执行有关用户权限,请求的有效性以及其他事项的一些测试。如果一个测试失败,它将返回带有适当HTTP.Status,错误代码,错误消息等的play.Result
。如果每个测试通过,它将返回所请求对象的json表示形式以及HTTP 200状态。
答案 0 :(得分:0)
您已经建议使用Optional
,这是一个很好的方向。
首先,在使用tryToGetObject(param1)
或Optional<Object>
的同时修改Optional.of()
以返回Optional.ofNullable()
。然后,您可以执行以下操作:
myObject = tryToGetObject(param1).orElse(new ClassA("it's null"));
您可以将其包装在另一种方法中以消除异常:
private Object getMyObjectOrReturnClassAObject(Object param1) {
try {
return tryToGetObject(param1).orElse(new ClassA("it's null"));
catch(ParamNotValidException e) {
return new ClassA("param1 is not valid");
}
}