Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有效的Java。可序列化生成器模式(如何添加公共无参数构造函数?)_Java_Builder_Effective Java - Fatal编程技术网

有效的Java。可序列化生成器模式(如何添加公共无参数构造函数?)

有效的Java。可序列化生成器模式(如何添加公共无参数构造函数?),java,builder,effective-java,Java,Builder,Effective Java,我想使用生成器模式以Joshua Bloch的风格创建一个类。但是我想使用这个类作为DTO对象,并从EJB传输它。所以它需要有公共的无参数构造函数。如何在builder模式中实现这种javabean风格?在有效的Java对象中,只有一个构造函数接受Builder对象作为参数。若我添加了并没有参数的公共构造函数,那个么我就失去了构建器相对于JavaBean模式的优势 不确定是什么原因让您在这里使用builder模式,但以下是我的经验告诉您的问题 您正在使用EJB。因此,我假设您处于分布式应用程序模

我想使用生成器模式以Joshua Bloch的风格创建一个类。但是我想使用这个类作为DTO对象,并从EJB传输它。所以它需要有公共的无参数构造函数。如何在builder模式中实现这种javabean风格?在有效的Java对象中,只有一个构造函数接受
Builder
对象作为参数。若我添加了并没有参数的公共构造函数,那个么我就失去了构建器相对于JavaBean模式的优势

不确定是什么原因让您在这里使用builder模式,但以下是我的经验告诉您的问题

  • 您正在使用EJB。因此,我假设您处于分布式应用程序模式
  • 您的DTO将用于在EJB之间传输数据。所以,你应该考虑使你的这个DTO可序列化(现在,有一个没有参数的构造函数是有意义的)。 据我所知,你所需要的只是某种变压器,它从某一层接收obj1进行处理,然后返回


    我建议只在对象构造是一个多步骤过程(例如,用户注册)的情况下使用builder

    那么,您可能希望将构建器变成bean,并使您的最终对象成为该构建器的
    .build()
    @fge的结果是的,您是对的。我想让构建器成为一个bean(因为我只能从EJB传输bean)。生成器应该是短期的人工制品,用于构造要传递的对象。@McDowell出于安全原因,我想使用生成器。i、 当客户端构建对象并将其传递给EJB方法时,该对象可能处于不一致状态。我想防止客户端在不一致的状态下创建对象。为什么你觉得这是设计的味道?因为构建器模式增加了传输对象的大小(添加构建器,至少在内部类中有所有类字段的副本)?@MyTitle也许我遗漏了一些东西,但注释中讨论的解决方案似乎只是将问题从bean转移到了构建器。bean(不带参数或构造函数;getter/setter)是可变的。生成器可以在无效状态下传递,我看不出比向bean(或其他验证机制)添加
    isValid
    方法有什么好处。谢谢。你能提供更多关于变压器的解释吗?伙计!!!transformer是任何将objA转换为objB的东西,比如ObjectB=new ObjectB()
    b.setPropert1(obja.getSomeProperty());