我想改进此代码以避免重复的方法调用。是否有解决此问题的方法?我不想每次在if else块中都调用相同的方法updateIndicator和createErrorResponse方法。
if (e.getRawStatusCode() == NOT_FOUND) {
String errorDetails = createNotFoundDetails(transactionId);
updateIdentifier(identifier);
return createErrorResponse(MISSING_VALID_TRANSACTION_ID_ERROR_MSG, errorDetails);
}
else if (e.getRawStatusCode() == UNAUTHORIZED) {
updateIdentifier(identifier);
if (responseHeaderValue.equals(TOKEN_EXPIRED) ) {
return createErrorResponse(UNABLE_TO_REACH_SVC_PROVIDER_ERROR_MSG,
INVALID_RESPONSE_FROM_SVC_PROVIDER_EXPIRED_TOKEN_ERROR_DETAILS);
}
return createErrorResponse(UNABLE_TO_REACH_SVC_PROVIDER_ERROR_MSG,
INVALID_RESPONSE_FROM_SVC_PROVIDER_INVALID_TOKEN_ERROR_DETAILS);
}
else {
updateIdentifier(identifier);
return createErrorResponse(UNABLE_TO_REACH_SVC_PROVIDER,
UNABLE_TO_REACH_SVC_PROVIDER_ERROR_DETAILS);
}
答案 0 :(得分:0)
您可以在该类中创建一个公共静态方法。例如
public static errorResponse method(identifier) {
updateIdentifier(identifier);
return createErrorResponse(
UNABLE_TO_REACH_SVC_PROVIDER, UNABLE_TO_REACH_SVC_PROVIDER_ERROR_DETAILS);
}
在代码中,您将调用方法。
答案 1 :(得分:0)
首先,可以在if else块中提取updateIdentifier(identifier);
语句,因为它在每个分支中都执行。
然后您的代码将在每个分支内使用if else逻辑和单个调用createErrorResponse(...)
方法。考虑到必须检查的不同条件,这不是一个糟糕的代码。无论如何,如果您需要进一步减少,可以采取不同的方法。请注意,这将减少此处的代码,但会将更多代码添加到其他地方。也许还有几节课。
我已经使用Enums
实现了一个示例,目的是让您了解您可以做什么。
public enum Error
{
ERROR1TEST
{
@Override
ErrorResponse createErrorResponse()
{
return new ErrorResponse( "First Error" );
}
},
ERROR2TEST2
{
@Override
ErrorResponse createErrorResponse()
{
return new ErrorResponse( "Second Error" );
}
},
ERROR3
{
@Override
ErrorResponse createErrorResponse()
{
return new ErrorResponse( "Third Error" );
}
},
;
abstract ErrorResponse createErrorResponse();
}
现在,根据您的e.getRawStatusCode()
和responseHeaderValue
,我们需要在Enum Constant名称上方创建。在每个枚举常量中,我们都有一种方法可以为每种情况构建错误响应。
public static void main( String[] args )
{
CustomEvent e = new CustomEvent();
e.setEvent( 1 );
String headerValue = "TEST";
ErrorResponse errorResponse = createErrorResponse( e, headerValue );
System.out.println( errorResponse );
}
private static ErrorResponse createErrorResponse( CustomEvent e, String headerValue )
{
String name = "ERROR" + e.getRawStatusCode() + headerValue;
return Error.valueOf( name ).createErrorResponse();
}
输出:ErrorResponse{errorMsg='First Error'}
使用此方法,您可以将代码缩减为类似的内容
updateIdentifier(identifier);
return createErrorResponse(e.getRawStatusCode(),responseHeaderValue );
请注意,这只是一个示范。您可能需要进行相应的调整。如果期望未定义状态,则处理在调用No enum constant Error
时引发的Error.valueOf( name )
。
使用的其他课程
public class ErrorResponse
{
String errorMsg;
public ErrorResponse( String errorMsg )
{
this.errorMsg = errorMsg;
}
@Override public String toString()
{
return "ErrorResponse{" +
"errorMsg='" + errorMsg + '\'' +
'}';
}
}
public class CustomEvent
{
private int event;
public int getEvent()
{
return event;
}
public void setEvent( int event )
{
this.event = event;
}
public int getRawStatusCode()
{
return this.event;
}
}