采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
看到model层中任一的类都有@Builder,就去看了了解了下builder这种建造者模式,但是该注解@Builder好像跟这种模式并没有太大关系,这是第一个问题。
然后@Builder是否为灵活地解决不必要的参数设置,通俗讲就是使传参更灵活。这是第二个问题
希望老师能够解惑。
你好,关于@Builder注解,不写注解的时候:
public class Example<T> { private T foo; private final String bar; private Example(T foo, String bar) { this.foo = foo; this.bar = bar; } public static <T> ExampleBuilder<T> builder() { return new ExampleBuilder<T>(); } public static class ExampleBuilder<T> { private T foo; private String bar; private ExampleBuilder() {} public ExampleBuilder foo(T foo) { this.foo = foo; return this; } public ExampleBuilder bar(String bar) { this.bar = bar; return this; } @java.lang.Override public String toString() { return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")"; } public Example build() { return new Example(foo, bar); } } }
public class Example<T> {
private T foo;
private final String bar;
private Example(T foo, String bar) {
this.foo = foo;
this.bar = bar;
}
public static <T> ExampleBuilder<T> builder() {
return new ExampleBuilder<T>();
public static class ExampleBuilder<T> {
private String bar;
private ExampleBuilder() {}
public ExampleBuilder foo(T foo) {
return this;
public ExampleBuilder bar(String bar) {
@java.lang.Override
public String toString() {
return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")";
public Example build() {
return new Example(foo, bar);
写这个注解的时候:
@Builderpublic class Example { private int foo; private final String bar;}
@Builder
public class Example {
private int foo;
构造一个实例,属性不需要单独set, 只需要如下即可
Example.builder().foo(1).bar(“test”).build();
其实就是按照builder模式来实现的。
使用这个注解对设置值时也是特别的灵活,允许根据需要填入需要设置的参数,非常的灵活。这里有个需要注意的问题是有些值没设置的是空值。(课程里sql会对字段做空判断后执行插入或更新)
如果个别值希望使用默认值,可以这样来用:
@Builder.Defaultprivate int type = 2;
@Builder.Default
private int type = 2;
非常感谢!
登录后可查看更多问答,登录/注册
源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术
2.2k 6
1.8k 22
1.1k 20
925 18