没有arg构造函数或arg构造函数

Nik*_*ala 4 java constructor

在我的程序中,我读取一个固定长度的文件,将每个字符串存储在一个局部变量中,然后将每个值存储到一个类类型数组列表中.为了创建数组列表的对象,我使用了包含所有变量的参数构造函数.以下代码演示了这一点.

String a = "text1";
String b = "text2";
SampleModel sm = new SampleModel(a,b);
ArrayList<SampleModel> sampleList = new ArrayList<>();
sampleList.add(sm);
Run Code Online (Sandbox Code Playgroud)

我觉得这绝对正确但我的同事让我把它改成一个没有arg的构造函数,而是调用getter和setter.那将是如下.

SampleModel sm = new SampleModel();
ArrayList<SampleModel> sampleList = new ArrayList<>();
String a = "text1";
String b = "text2";
sm.setA(a);
sm.setB(b);
sampleList.add(sm);
Run Code Online (Sandbox Code Playgroud)

有没有理由比参数构造函数更喜欢没有arg构造函数?(我的程序有大约15个变量)

And*_*mas 7

这取决于课程的使用方式.

例如,一个不可变类需要一个带参数的构造函数,而不需要setter.

但是Java Bean需要一个无参数的构造函数和setter.

有些事情需要考虑:

  • 封装可能很有价值.除了像JavaBeans这样的特殊情况之外,通常可以根据所需的交互来设计类的接口,而不是基于当前的数据成员集.
  • 方法有名字.Java不支持命名参数.方法名称在调用代码中传达如何使用实际参数.如果您的类具有多个参数,则通过方法传递它们可以产生更易读的调用代码.
  • 不可变类具有价值.如果您在类中直接添加命名setter,它将不会是不可变的.构建器模式允许您接受构造参数,即使对于不可变类也是如此.