在 Java 中显式初始化字符串和枚举变量



在下面的代码中删除构造函数中的初始化语句更好吗?

class Dog {
   private String name;
   private Type type;
   public Dog() {
       this.name = null;
       this.type = null;
   }
   public static Enum Type {
       large, medium, small;
   }
}

这取决于,在什么意义上更好?

如果您最看重干净的短代码,那么这很好。下面是一个示例:

class Dog {
private String name;
private Type type;
public static enum Type {
    large, medium, small;
}

这是有效的,因为未初始化的Objectnull 开头。此外,不需要指定空构造函数。

如果您重视清晰度,但仍希望代码尽可能简短,那么

class Dog {
    private String name = null;
    private Type type = null;
    public Dog() {}
    public static enum Type {
        large, medium, small;
    }
}

更好,因为其他(经验不足的(开发人员可以清楚地看到值是什么,并且构造函数已明确定义。

在构造函数中初始化常量值也有其自身的好处:

  • 将声明与值/逻辑明确分开
  • 将来在需要时灵活添加逻辑(可扩展性(

只需评估每种情况的利弊,看看您喜欢什么。唯一的例外是使用现有代码库时;在这种情况下,请遵守惯例/风格指南。

这类问题往往会产生很多意见,这个答案也不例外。以下是我在大学里的表现:

为所有(非最终(变量声明默认值,即使这些变量等于标准值(null、0、...(。原因是现在更容易看到,除非显式定义,否则变量将默认为 null。

所以这将是:

class Dog {
   private String name = null;
   private Type type = null;
   public Dog(){}
   public static Enum Type {
       large, medium, small;
   }
}

请记住,这只是关于干净代码的意见。两者的行为方式完全相同。

最新更新