【发布时间】:2017-10-06 09:39:08
【问题描述】:
在 Java 中构建对象有多种方法。对于我的用例,假设我有一个带有私有属性字段的抽象 Person 类和一个名为 Tom 的子类。
1.获取器/设置器
Person 类中的无参数构造函数、setter 和 getter。可以通过使用 Project Lombok 的 @Data 注释来简化。
Tom tom = new Tom(); // Subclass of Person
tom.setName("Tom");
tom.setAge(42);
我读到除非使用框架,否则应该避免使用这种方法。
2。参数化构造函数
使用构造函数参数构建对象。具有各种可选和必需属性的大对象的过度构造函数重载。也可以使用 Project Lombok 的各种constructor annotations 进行简化。
Tom tom = new Tom("Tom", 42);
然后,Tom 的构造函数将调用super("Tom", 42)。在Person中,如果可选参数较多,可以使用构造函数重载。
3.建造者模式
因为构造函数重载会很快变得非常混乱,Josh Bloch 提出了构建器模式。同样,这可以通过 Project Lombok 的 @Builder 注释来简化。这是使用非抽象 Person 类时的样子:
Person person = new Person.Builder().name("Tom").age(42).build();
正如others 在我之前所说的那样,尝试将构建器模式与继承一起使用是困难的(但并非不可能)。
我确信构建对象的方法还有很多,但我只列出了我熟悉的那些。
我的问题是:使用 Java 8 甚至 Java 9 功能,构建作为具有必需和可选属性的抽象超类的子类的对象的绝对最佳方法是什么? p>
很多关于 SO 的教程和问题已经过时,并且可能没有强制执行现在被认为是最佳实践的内容。
【问题讨论】:
标签: java oop inheritance abstract-class lombok