Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Design Patterns_Serialization_Store - Fatal编程技术网

用Java设计数据类

用Java设计数据类,java,design-patterns,serialization,store,Java,Design Patterns,Serialization,Store,我做了一些研究,但对此我不确定 我有一个进程需要返回一组数据。我将数据放在结果类中: public final class Result implements Serializable { /** Inmmutable class * */ private static final long serialVersionUID = -916675731077365794L; private final String nick; private fin

我做了一些研究,但对此我不确定

我有一个进程需要返回一组数据。我将数据放在结果类中:

public final class Result implements Serializable {
/** Inmmutable class
     * 
     */
    private static final long serialVersionUID = -916675731077365794L;

    private final String nick;
    private final LocalDateTime date_init;
    private final LocalDateTime date_end;

    private final double profit;
    private final double tax;

    private final Double balance;

    private final int inputs;

    private final List<CustomObjects> inputs_by_month;

    // Keep going...

    // constructor

    Results(String nick, LocalDateTime date_init, LocalDateTime date_end,
            double profit, double tax/* Keep going... */) {
        super();
        this.nick = nick;
        this.date_init = date_init;
        this.date_end = date_end;
        this.profit = profit;
        this.tax = tax;
        /* Keep going... */
    }

    /* getters here */
}
public最终类结果实现可序列化{
/**不可交换类
* 
*/
私有静态最终长serialVersionUID=-916675731077365794L;
私人最终字符串尼克;
私有最终LocalDateTime日期\u init;
私有最终LocalDateTime日期\u结束;
私人最终双重利润;
私人最终双重征税;
私人最终双平衡;
私人最终输入;
每个月的私人最终清单输入;
//继续。。。
//建造师
结果(字符串nick、LocalDateTime date\u init、LocalDateTime date\u end、,
双倍利润,双倍税收/*继续…*/){
超级();
this.nick=nick;
this.date_init=date_init;
this.date\u end=日期\u end;
这个。利润=利润;
这个。税=税;
/*继续*/
}
/*这里有吸气剂*/
}
我不确定如何创建这个对象。是的,我需要一个工厂班

public final class ResultFactory {

    private String nick;
    private LocalDateTime date_init;
    private LocalDateTime date_end;

    private double profit;
    private double tax;

    private Double balance;

    private int inputs;

    private List<CustomObjects> inputs_by_month;

    // Keep going...

    public Result getResult()
    {
       return Result(nick,date_init,date_end,/*...*/);
    }

    public void setNick(String nick)
    {
        this.nick = nick;
    }

    public void setDateInit(LocalDateTime date_init){
        this.date_init = date_init;
    }

    /* ... */
}
公共最终类结果工厂{
私人字符串尼克;
私有LocalDateTime date_init;
私有LocalDateTime日期\u结束;
私人双重利润;
私人双重征税;
私人双平衡;
私人输入;
每个月的私有列表输入;
//继续。。。
公共结果getResult()
{
返回结果(尼克,起始日期,结束日期,/*…*/);
}
公共无效设置尼克(字符串尼克)
{
this.nick=nick;
}
public void setDateInit(LocalDateTime date_init){
this.date_init=date_init;
}
/* ... */
}
但我在复制整个结构。看起来不对


我正在寻找一种在可变类中存储数据的模式。

您可以将
结果
类拆分为多个类

public class Result {
  private final String nick;
  private final LocalDateTime date_init;
  private final LocalDateTime date_end;
  private final MonetaryResult monetaryResult;
  private final InputsResult inputsResult;

   Results(String nick, LocalDateTime date_init, LocalDateTime date_end, MonetaryResult monetaryResult, InputsResult inputsResult) {
        ...
        this.monetaryResult = monetaryResult;
        this.inputsResult = inputsResult;
        ...
    } 
}
通过这种方式,可以避免类具有许多属性,从而使其构造变得困难

可以这样构造结果对象

new Restult(
 "nick",
  createDate(),
  createDate(),
  new MonetaryResult(...),
  ...
)

您可以将
结果
类拆分为更多类

public class Result {
  private final String nick;
  private final LocalDateTime date_init;
  private final LocalDateTime date_end;
  private final MonetaryResult monetaryResult;
  private final InputsResult inputsResult;

   Results(String nick, LocalDateTime date_init, LocalDateTime date_end, MonetaryResult monetaryResult, InputsResult inputsResult) {
        ...
        this.monetaryResult = monetaryResult;
        this.inputsResult = inputsResult;
        ...
    } 
}
通过这种方式,可以避免类具有许多属性,从而使其构造变得困难

可以这样构造结果对象

new Restult(
 "nick",
  createDate(),
  createDate(),
  new MonetaryResult(...),
  ...
)
您可以使用Lombok和注释:

@Builder
@Value
public final class Result implements Serializable {
    String nick;
    LocalDateTime date_init;
    LocalDateTime date_end;
    double profit;
    double tax;
    Double balance;
    int inputs;
    List<CustomObjects> inputs_by_month;
    // Keep going...
}
@Builder
@价值观
公共最终类结果实现了可序列化{
线痕;
LocalDateTime日期\初始化;
LocalDateTime日期\结束;
双利;
双重征税;
双平衡;
整数输入;
按月列出输入;
//继续。。。
}
Lombok将为您生成:

  • private final
    字段上的关键字
  • 建造师
  • toString
    等于
    hashCode
    方法
  • 生成器(然后可以使用
    Result.builder().nick(“foo”).build()构建对象
您可以使用Lombok和注释:

@Builder
@Value
public final class Result implements Serializable {
    String nick;
    LocalDateTime date_init;
    LocalDateTime date_end;
    double profit;
    double tax;
    Double balance;
    int inputs;
    List<CustomObjects> inputs_by_month;
    // Keep going...
}
@Builder
@价值观
公共最终类结果实现了可序列化{
线痕;
LocalDateTime日期\初始化;
LocalDateTime日期\结束;
双利;
双重征税;
双平衡;
整数输入;
按月列出输入;
//继续。。。
}
Lombok将为您生成:

  • private final
    字段上的关键字
  • 建造师
  • toString
    等于
    hashCode
    方法
  • 生成器(然后可以使用
    Result.builder().nick(“foo”).build()构建对象

如果总是直接使用
Result
构造函数会怎么样?我认为你应该将这个类拆分成更多的类,并将这些类作为属性添加到
结果中
。你使用的是一个构建器,而不是一个工厂,这很好,你应该这样使用构建器,但我不应该持有任何logic@alayor我将进程划分为不同的子类,每个类收集不同的数据。如果您总是直接使用
Result
构造函数会怎么样?我认为你应该将这个类拆分成更多的类,并将这些类作为属性添加到
结果中
。你使用的是一个构建器,而不是一个工厂,这很好,你应该这样使用构建器,但我不应该持有任何logic@alayor我把进程分成不同的子类,每个类收集不同的数据。