Java 非循环初始化的代码可读性

Java 非循环初始化的代码可读性,java,optimization,code-readability,Java,Optimization,Code Readability,假设您必须初始化一些无法在循环中真正处理的对象。在调用构造函数的基础上,您必须以某种方式使用提供的数据初始化对象。最后,您还希望以不同的方法使用该对象。为了可读性,甚至是计算,会推荐方法A或B吗 方法A DummyObject a = new DummyObject("fs", "y", 4); a.init("aseas", true); otherObjectA.addDummy(a); DummyObject b = new DummyObject("qwe", "sd", 8); b.

假设您必须初始化一些无法在循环中真正处理的对象。在调用构造函数的基础上,您必须以某种方式使用提供的数据初始化对象。最后,您还希望以不同的方法使用该对象。为了可读性,甚至是计算,会推荐方法A或B吗

方法A

DummyObject a = new DummyObject("fs", "y", 4);
a.init("aseas", true);
otherObjectA.addDummy(a);

DummyObject b = new DummyObject("qwe", "sd", 8);
b.init("a4rhs", true);
otherObjectA.addDummy(b);

DummyObject c = new DummyObject("j", "xe", 39);
c.init("as", false);
otherObjectB.addDummy(c);

DummyObject d = new DummyObject("qw", "k", 12);
d.init("sdfs", true);
otherObjectC.addDummy(d);
// and so on...
方法B

DummyObject a = new DummyObject("fs", "y", 4);
DummyObject b = new DummyObject("qwe", "sd", 8);
DummyObject c = new DummyObject("j", "xe", 39);
DummyObject d = new DummyObject("qw", "k", 12);

a.init("aseas", true);
b.init("a4rhs", true);
c.init("as", false);
d.init("sdfs", true);

otherObjectA.addDummy(b);
otherObjectB.addDummy(c);
otherObjectA.addDummy(a);
otherObjectC.addDummy(d);
// and so on...
1) 为什么不在DummyObject的构造函数中包含init()方法的内容?构造函数的目标也是初始化对象

2) 如果您有充分的理由保持这种方式,并且有许多DummyObject需要以这种方式配置,那么更具可读性的解决方案是提取一个方法来执行初始化,并为每个DummyObject添加步骤:

我将使用方法A:

DummyObject d = new DummyObject("qw", "k", 12);
d.init("sdfs", true);
otherObjectC.addDummy(d);
我将提取一种新方法,如下所示:

  DummyContainer container = ...;
  DummyObject a = new DummyObject("qw", "k", 12);
  initAndAddDummyObject(a, container,"sdfs",true);
     ...
  DummyObject b = new DummyObject("qwe", "sd", 8);
  initAndAddDummyObject(b, container,"a4rhs", true);

     ...

 public void initAndAddDummyObject(DummyObject source, DummyContainer container,  String initString, boolean initBoolean){ 
        source.init(initString, initBoolean);
        container.addDummy(source);
    }
1) 为什么不在DummyObject的构造函数中包含init()方法的内容?构造函数的目标也是初始化对象

2) 如果您有充分的理由保持这种方式,并且有许多DummyObject需要以这种方式配置,那么更具可读性的解决方案是提取一个方法来执行初始化,并为每个DummyObject添加步骤:

我将使用方法A:

DummyObject d = new DummyObject("qw", "k", 12);
d.init("sdfs", true);
otherObjectC.addDummy(d);
我将提取一种新方法,如下所示:

  DummyContainer container = ...;
  DummyObject a = new DummyObject("qw", "k", 12);
  initAndAddDummyObject(a, container,"sdfs",true);
     ...
  DummyObject b = new DummyObject("qwe", "sd", 8);
  initAndAddDummyObject(b, container,"a4rhs", true);

     ...

 public void initAndAddDummyObject(DummyObject source, DummyContainer container,  String initString, boolean initBoolean){ 
        source.init(initString, initBoolean);
        container.addDummy(source);
    }

我无法告诉您这些对象之间的关系,以及您是否可以使用Facade模式将功能分组在一起,或者只是一个界面。我在这里看到的是,您可以使用Factory模式来创建和初始化对象


关于代码的可读性,这取决于您,我更喜欢的是方法A。

我无法告诉您这些对象之间的关系,以及您是否可以使用Facade模式将功能分组在一起或只是一个接口。我在这里看到的是,您可以使用Factory模式来创建和初始化对象


关于代码的可读性,这取决于您,我更喜欢的是方法A。

而方法
C
可能是编写一个方法以减少冗余code@KevinEsche是的,但这可能会导致方法需要大量参数,这反过来会使代码非常不可读,它使它更具可读性。init()方法对我来说也很有味道。方法
C
可能是为了减少冗余而编写一个方法code@KevinEsche是的,但这可能会导致方法需要大量参数,这反过来会使代码非常不可读。查找生成器模式,它会使代码更可读。init()方法也很适合我。