当没有其他构造函数时,是否有理由显式编写默认构造函数?

fro*_*die 14 java default-constructor

我最近在一个类中看到了这个构造函数:

public MyClass(){ }
Run Code Online (Sandbox Code Playgroud)

没有其他建设者.

是否有一个原因?Java会自动创建一个默认构造函数,那么为什么要显式声明一个呢?或者这被认为是一种好的做法,就像对单语句if语句使用大括号一样 - 如果稍后添加其他构造函数而你忘记了你没有默认值......?

Mic*_*urr 16

在这种情况下,几个小点不太可能是你看到它的原因.

  • 它为您提供了设置断点的功能.
  • 你可以把它变成非公开的

至于"如果以后添加其他构造函数并且您忘记了没有默认值" - 这可能是一个原因,我想.但是如果添加了非默认构造函数,那么使用默认构造函数的任何代码都将无法编译,因此添加新构造函数的人通常也需要为默认的ctor添加一个defintion.

再说一次,我无法想到定义空ctor的任何特别的伤害(虽然现在我输入了这个,我觉得有人可能会指出C++的某个角落,它可能会咬你).

  • 仅为"以防我以后需要添加其他代码的代码"而编写的代码是代码气味 (3认同)
  • 它可能是由IDE自动创建的,或者是从删除非默认构造函数中遗留下来的.另外,我已经知道在我知道需要默认的类(即因为某些序列化或数据绑定要求)上创建这样的构造函数,并且不希望在稍后构建第二个构造函数时被问题所困. (2认同)

che*_*vim 6

它不起任何作用,可以安全地删除.