【发布时间】:2019-09-13 20:17:44
【问题描述】:
有一个方法:
private String myMethod(String gender)
{
String newString = "";
if(gender.equals("a"))
newString = internal.getValue();
else
newString = external.getValue();
return newString;
}
我重构了所有内容,但做了一个小改动:
String newString; 而不是:String newString = "";
此重构是否改进了代码?我知道String 是null,当我们不初始化它时,但在这个例子中,它的值总是来自if 或else。这次重构有什么改变吗?
【问题讨论】:
-
在这里返回两次将是更具可读性的解决方案。顺便说一句,您的代码示例缺少返回。此外,初始分配令人困惑,因为它的值从未被使用并且总是被覆盖。这是关于意图的清晰性,初始分配使整体代码更加不清楚
-
在两个分支中你都给它一个值,所以在前一行给它一个“初始”值是没有意义的。您可以用
String newString = gender.equals("a") ? internal.getValue() : external.getValue();替换整个内容 -
未初始化的local变量not为空;它们根本没有可观察到的价值。
-
另请注意,Java 7 及更高版本允许在 switch 语句中使用字符串。对于比这更复杂的代码,这可能非常有用。