【问题标题】:Should "null" ever a valid value for a property?“null”应该是属性的有效值吗?
【发布时间】:2019-09-05 05:44:23
【问题描述】:

我有一个 key=value 属性,然后将其写入文件。如果键存在但值为空或null,则保存为key=""。现在,文字字符串“null”可以成为键的有效属性值吗?在我的代码审查中被问到,但我觉得将其视为有效是不好的做法,因为系统将空字符串视为空值。

目前,如果属性为 null 或“null”,则将其格式化为空字符串

if (key != null && !key.trim().isEmpty() && key.startsWith("-D")) {    
    if (value == null || value.equals("null")) {
        value = "";
}
//Other code

将值附加到要写入文件的格式化键上。

【问题讨论】:

  • 不知道其他人如何回答这个问题,除非用更笼统的说法,因为我们不了解您的系统。
  • “现在,文字字符串“null”可以成为键的有效属性值吗?“是的。
  • 例如,你是谁来决定某人是否可以被命名为“null”?请记住,这个世界包含不止一个国家​​,每个国家都有自己的命名怪癖。
  • 更进一步; Null 是一个完全有效的盖尔姓氏
  • 你的数据结构是一个地图??

标签: java


【解决方案1】:

value.equals("null") 正是一个值,它不是 NULL。java 中 NULL 的唯一键是“NULL”。 (小写或大写不带引号)

查看下面的代码,它可能会对您有所帮助。

String value = "null";  // where value key work is holding string value which is "null".

为了检查 null 使用下面的代码

if (value == null)
in order to check null or empty use the below code
if (value == null || value.isEmpty()) 
//where is empty check for empty string like valueX = "";

【讨论】:

    【解决方案2】:

    这应该已经发布到http://codereview.stackexchange.com/

    但是,"null" 是否可以等同于 null 以及 null 是否可以等同于 "" 完全是特定于域的。如果您的应用程序可以使用它,那么它可以使用它。故事结束。

    但是"null"、null 和"" 的概念在逻辑上是完全不同的,并且您正在处理接近代码级别的配置(属性文件由通常了解编码的人编辑)。通过使这些相等,您和查看您代码的任何人的生活都会变得更加艰难,因为他们需要了解您选择的非标准特殊情况如何工作,从而增加了他们的认知负担。

    所以,如果你想编写好的代码,你永远不应该将"null" 等同于null 或null 等同于一个空字符串。

    为什么您需要知道键是否存在而没有值?在键值属性的上下文中,它没有任何意义,因为如果键没有值,那么键值对就不存在。 Java 属性的常见用例如下:

    # Literal value
    key.1=value
    
    # Empty string
    key.2=
    
    # Null (commented out means not defined)
    # key.3=
    

    【讨论】:

    • “属性文件由通常了解编码的人编辑”这是一个很好的观点,我的想法是如果有人将键设置为“null”,我确保值为空值。但无论出于何种原因,开发人员可能只是希望该值为“null”
    【解决方案3】:

    据我了解,您对 NULL 概念有疑问。使用您当前的代码,如果有人输入字符串“null”,这与 NULL 概念不同,您的值将为空。简短回答:是的,文字字符串“null”可以是有效属性,但这取决于项目背后的逻辑。

    【讨论】:

      【解决方案4】:

      取决于您的代码逻辑,但 NULL 和空字符串是不同的。使用 HashMap 时,您可以设置 NULL Key,有时使用它会有所帮助。如果您确定您使用的 Map 不能有 NULL 键,则无需担心。 NULL 和字符串值“null”之间也有区别。取决于您拥有的对象的性质以及代码中的逻辑。

      【讨论】:

        【解决方案5】:

        文字字符串“null”不应被视为与空引用相同。这意味着如果您的系统允许“null”作为有效的属性值,只要您的系统没有明确声明,就将其视为任何其他有效值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-18
          • 1970-01-01
          • 2012-05-26
          • 2013-08-08
          • 1970-01-01
          • 2019-10-23
          • 2010-11-01
          相关资源
          最近更新 更多