在Java中显式初始化String和Enum变量?

时间:2017-05-12 22:31:42

标签: java enums initialization

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

class Dog {

   private String name;
   private Type type;

   public Dog() {
       this.name = null;
       this.type = null;
   }

   public static Enum Type {
       large, medium, small;
   }
}

2 个答案:

答案 0 :(得分:1)

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

如果你认为短清洁代码高于其他所有代码,那么这很好。这是一个例子:

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;
    }
}

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

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

  • 清楚地将声明与values / logic
  • 分开
  • 将来需要时可灵活添加逻辑(可扩展性)

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

答案 1 :(得分:0)

这类问题往往产生很多意见,这个答案也没有什么不同。以下是我在大学学习的方式:

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

那就是:

class Dog {

   private String name = null;
   private Type type = null;

   public Dog(){}

   public static Enum Type {
       large, medium, small;
   }
}

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