2

我今天早些时候问了这个愚蠢的问题并得到了很好的答案。我想我真正想问的是以下几点:

String aString = ""; // Or = null ?
if(someCondition)
   aString = "something";

return aString;

在这种情况下,必须初始化字符串才能返回它。我一直认为任何一个选项(将其设置为“”或 null 看起来有点难看。我只是想知道其他人在这里做什么......或者更多的是你是否想要空字符串或 null 被传递在你的程序中(如果你准备好处理任何一个)?

还假设中间逻辑太长而无法干净地使用条件 (? :) 运算符。

4

7 回答 7

3
return (someCondition) ? "something" : "";

或者

return (someCondition) ? "something" : null;

通常,如果您的函数说它将返回一个字符串,我更愿意实际返回一个字符串而不是空值。无论哪种方式,调用函数都应该检查这两种情况。

于 2010-07-23T19:59:29.560 回答
1

取决于你想要达到的目标,

一般来说,我会返回 null 表示没有处理任何内容,它稍后可能会弹出一些情况,其中 someCondition 为真,但你构建的字符串是 "" 无论如何,如果没有处理任何内容,如果返回 null .

IE

String aString = null;
if(someCondition)
  aString = "something";

return aString;

但这一切都取决于您想要实现的目标......例如,如果代码假设构建一个直接在 UI 中传递的字符串,您将使用 "" 代替

于 2010-07-23T20:05:41.313 回答
1

在这种情况下,最好执行以下操作:

public void func() {
    boolean condition = getConditionFromSomewhere();
    String condString = getAppropriateValue(condition);
}

public String getAppropriateValue(boolean condition) {
    if (condition) {
        return "something";
    } else {
        return "somethingElse";
    }
}

对于布尔条件而言,这似乎有点矫枉过正,但如果您遇到更复杂的条件(更多选择,如枚举等),它会很好地抽象出该逻辑。并使用描述性方法名称使其几乎可以自我记录以启动。

于 2010-07-23T20:07:26.723 回答
1

既然你问我们的意见...

我对质量有点过分了。我更喜欢我所有的“if”语句都有一个“else”,因为(1)如果有多个嵌套的“if”,它有助于理解代码,(2)迫使我考虑可能性(如果条件是假的?)。

关于原因(1),我更喜欢避免嵌套 if,但有时您会继承带有很多 if 的代码。

if(someCondition)
   aString = "something";
else
   aString = "";

我更喜欢“null”,因为它会使应用程序失败并转储我可以遵循的堆栈。相反,一个空字符串会让事情继续下去。自然,这取决于您的代码逻辑,哪个更好:null 或“”。

于 2010-07-23T20:17:34.533 回答
0

想想看,我很少在代码中出于任何目的使用“”。

于 2010-07-25T01:26:40.827 回答
0

是的,这只是您想要在程序中传递空字符串还是空字符串的问题。如果您打算稍后将内容附加到它,并且someConditionjust 表示您应该给它一个第一个值开始,那么使用空字符串。如果您打算让它指示有一个字符串或什么都没有,那么使用 null 可能会更好。

于 2010-07-23T20:00:47.753 回答
0

这只是您对 api 应该做什么的偏好。如果您返回 null,那么如果 api 用户不检查 null,他们可能会获得 NPE。但是,如果您使用 "" 字符串,如果它不应该为空,则错误可能会静默传递。这是您编写 api 的方式的偏好,并且取决于用例。

于 2010-07-23T20:01:32.750 回答