老师您好,CourseBuilder是静态内部类,为什么不直接Course.CourseBuilder?
来源:7-2 建造者模式coding
天使也很坏
2019-04-08
写回答
1回答
-
天使也很坏
提问者
2019-04-08
已解决!写法不同,我是用静态工厂方法,搞混了。
public class Test { // 外部类私有属性 private Integer courseId; private String courseName; private Date createTime; // 私有的全参构造方法,只为build()方法服务 private Test(TestBuilder testBuilder) { this.courseId = testBuilder.courseId; this.courseName = testBuilder.courseName; this.createTime = testBuilder.createTime; } // 公开的get方法,对外提供取值操作 public Integer getCourseId() { return courseId; } public String getCourseName() { return courseName; } public Date getCreateTime() { return createTime; } // 公开的toString方法,方便打印 @Override public String toString() { return "Test [courseId=" + courseId + ", courseName=" + courseName + ", createTime=" + createTime + "]"; } // 公开的静态工厂方法 -- 获取建造者实例 -- 通过Test.builder()调用 public static TestBuilder builder() { return new TestBuilder(); } // 静态内部类 -- 建造者 -- 必须为static class static class TestBuilder { // 内部类私有属性 -- 保持和外部类一致 private Integer courseId; private String courseName; private Date createTime; // 公开的属性构造方法 -- 方法命名和属性名一致 -- 参考lombok中的@Builder注解 public TestBuilder courseId(Integer courseId) { this.courseId = courseId; return this; } public TestBuilder courseName(String courseName) { this.courseName = courseName; return this; } public TestBuilder createTime(Date createTime) { this.createTime = createTime; return this; } // 公开的实例构建方法 -- 通过TestBuilder.build()调用 -- 只能通过builder()构建 public Test build() { return new Test(this); // 将调用者的引用传递给构造方法构建实例对象 } } }
00
相似问题