目录
2.2 在OuterClass添加静态方法:入参是User,返回值是OuterClass.java(编译正确)
2.3 修改OuterClass添加静态方法,加入了一些常见的业务逻辑判断(编译报错 java:找不到符号)
1.前言(废话)
在日常的软件开发工作中,建造者模式(或创建者模式)是很实用的一种设计模式,用于很方便地创建一个对象,减少写get、set、无参构造器等方法的时间,特别是在类的成员比较多的情况,大大减少了代码的篇幅(一大堆的get、set方法有多长)。
通过 lombok包里面的@Builder注解,我们可以很简单的实现一个类的get、set等方法。但可惜在实际使用时,如果类的内部还有一个静态内部类时,编译时可能会出现Error:(xx,xx)java: 找不到符号问题(这和代码里面外部类和内部类使用顺序有关),点击提示栏错误地方,idea会自动将光标移到@Builder注解上。
2.测试代码
2.1 基本类
User.java
import lombok.Data;
@Data
public class User {
private String name;
}
OuterClass.java和InnerClass.java
import lombok.Builder;
import lombok.Getter;
@Builder
@Getter
public class OuterClass {
// 静态内部类是外部类的一个成员变量
private InnerClass innerClass;
@Builder
@Getter
public static class InnerClass {
private User user;
}
}
2.2 在OuterClass添加静态方法:入参是User,返回值是OuterClass.java(编译正确)
import com.test.OuterClass.InnerClass.InnerClassBuilder;
import lombok.Builder;
import lombok.Getter;
@Builder
@Getter
public class OuterClass {
private InnerClass innerClass;
public static OuterClass toOuterClass(User user) {
return OuterClass.builder()
.innerClass(InnerClass.builder()
.user(user)
.build())
.build();
}
@Builder
@Getter
public static class InnerClass {
private User user;
}
}
2.3 修改OuterClass添加静态方法,加入了一些常见的业务逻辑判断(编译报错 java:找不到符号)
添加判断User是否为空(null)的判断,如果不为空,我们才把user对象构建到InnerClass对象中。
import lombok.Builder;
import lombok.Getter;
@Builder
@Getter
public class OuterClass {
private InnerClass innerClass;
public static OuterClass toOuterClass(User user) {
InnerClassBuilder builder = InnerClass.builder();
if (user != null) {
// 判断user是否为空
builder.user(user);
}
return OuterClass.builder()
.innerClass(builder.build())
.build();
}
@Builder
@Getter
public static class InnerClass {
private User user;
}
}
在网上找到了个类似的问题,lombok.Data @Data注解,解释是静态类的解析,在注解解析器生成builder之前,导致找不到符号cannot find symbol class xxx。
自己的解决方案是:自己实现builder的创建者模式的代码,最简单的就是第一个编译成功的代码,找到自动生成的xxx.class文件,直接把里面的相关代码复制一份,然后粘贴到源码中,去除类上面的@Builder注解。