【问题标题】:Java String initialization (part 2)Java 字符串初始化(第 2 部分)
【发布时间】:2011-03-20 07:26:41
【问题描述】:

我今天早些时候问了thisgoofy 问题并得到了很好的答案。我想我真正想问的是:

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

return aString;

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

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

【问题讨论】:

  • 存在(IMO)语义差异。 null 表示它没有被初始化,但 "" 表示它被故意设置为一个空字符串。
  • 称为三元运算符。 :)
  • 哦,我知道它叫什么(如果你看到我引用的帖子):) 不知道为什么我在这篇文章中称它为别的东西......

标签: java continue variable-initialization


【解决方案1】:
return (someCondition) ? "something" : "";

return (someCondition) ? "something" : null;

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

【讨论】:

  • 我不同意调用函数应该检查这两种情况。函数的返回值应该定义明确。
  • 括号是不必要的。
  • 另外,原发帖人改变了他的问题“假设中间逻辑太长而无法干净地使用[三元]运算符。”他不是在问是否使用三元运算符,而是在问返回 null 或空字符串是否是最佳实践。
  • 我想我更倾向于务实。不要假设——证明它——务实的程序员
【解决方案2】:

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

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

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

return aString;

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

【讨论】:

    【解决方案3】:

    在这种情况下,最好这样做:

    public void func() {
        boolean condition = getConditionFromSomewhere();
        String condString = getAppropriateValue(condition);
    }
    
    public String getAppropriateValue(boolean condition) {
        if (condition) {
            return "something";
        } else {
            return "somethingElse";
        }
    }
    

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2011-03-20
              • 1970-01-01
              • 1970-01-01
              • 2014-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多