我有一种感觉,这个if/else应该被重构,但我不确定我能做什么,或者我是否应该让它就这样……
private String someReportUrl(HttpServletRequest request, HttpServletResponse response) {
String url;
if (isBackToReportsSummary(request)) {
url = SUMMARY_PAGE;
getReportsSummary(request, response);
} else if (isComingFromPageA(request)) {
url = getTabUrl(request, REPORT_URL_FOR_PAGE_A);
}
else {
url = "/standAlone/reportUrl.jsp";
}
return url;
}基本上,我有一个报告摘要页面,其中列出了三到四个报告。第一个条件是当用户想要返回该页面时,第二个条件是当用户选择了该特定报表时,第三个条件是当用户选择该报表作为独立报表(而不是从摘要页面)时。
发布于 2012-07-28 23:09:12
如果您确实想要更改它,您可以将url初始化为默认返回,并且仅在满足以下两个条件之一时才更改它:
private String someReportUrl(HttpServletRequest request, HttpServletResponse response) {
String url = "/standAlone/reportUrl.jsp";
if (isBackToReportsSummary(request)) {
url = SUMMARY_PAGE;
getReportsSummary(request, response);
} else if (isComingFromPageA(request)) {
url = getTabUrl(request, REPORT_URL_FOR_PAGE_A);
}
return url;
}但实际上,这是很好的。
发布于 2012-07-28 23:11:24
这种“基于守卫”的风格怎么样?它通常使方法从上到下更容易阅读。
private String someReportUrl(HttpServletRequest request, HttpServletResponse response) {
if (isBackToReportsSummary(request)) {
getReportsSummary(request, response);
return SUMMARY_PAGE;
}
if (isComingFromPageA(request)) {
return getTabUrl(request, REPORT_URL_FOR_PAGE_A);
}
return "/standAlone/reportUrl.jsp";
}发布于 2012-07-28 23:38:14
你的代码就是这样的。但是,如果您想在一行中实现相同的功能,您也可以考虑使用?:operator。
下面是一个例子:
class round{
public static void main(String args[]){
int sampleInt=3;
if(sampleInt==1){
sampleInt = 5;
System.out.println("One");
}
else if(sampleInt==2){
sampleInt = 3;
System.out.println("Two");
}
else{
sampleInt = 4;
System.out.println("Else");
}
sampleInt = sampleInt==1?5:(sampleInt==2?3:4);
System.out.println("sampleInt "+sampleInt);
}
}最后,您的代码将如下所示:
url = isBackToReportsSummary(request)==true?SUMMARY_PAGE:(isComingFromPageA(request)==true?getTabUrl(request, REPORT_URL_FOR_PAGE_A):"/standAlone/reportUrl.jsp");https://stackoverflow.com/questions/11702121
复制相似问题