Java中如何结合Lombok Builder与枚举(Enum)使用?
Lombok Builder 与枚举类型配合使用解决方案
在基于Quarkus和Apache Camel的项目中,定义了包含MediumType枚举的ContactMedium类,使用Lombok @Builder构建实例时,无法添加mediumType枚举类型的参数,且不想使用普通字符串变量,以下是解决方法:
- 第一步:添加枚举类型成员变量
原ContactMedium类中缺少MediumType类型的成员变量,Lombok的@Builder只会为类中已声明的字段生成构建方法,因此需要先添加该字段:
package org.tmve.customer.ms.beans; import com.fasterxml.jackson.annotation.JsonProperty; import io.quarkus.runtime.annotations.RegisterForReflection; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @Getter @AllArgsConstructor @NoArgsConstructor @RegisterForReflection @Builder public class ContactMedium { public enum MediumType { TELEPHONE_NUMBER("telephone_number"), POSTAL_ADDRESS("postal_address"); private String value; MediumType(String value) { this.value = value; } } @JsonProperty("mediumType") private MediumType mediumType; @JsonProperty("characteristic") private Characteristic characteristic; }
- 第二步:使用Builder构建实例
添加字段后,Lombok会自动为mediumType枚举字段生成对应的构建方法,直接传入枚举常量即可:
// 构建TELEPHONE_NUMBER类型的ContactMedium实例 ContactMedium phoneNumber = ContactMedium.builder() .mediumType(ContactMedium.MediumType.TELEPHONE_NUMBER) .characteristic(/* 传入Characteristic实例 */) .build();
- 额外说明
如果需要让枚举的序列化/反序列化正常工作,可根据需求为MediumType枚举添加Jackson注解,确保JSON转换时使用枚举的value属性:
public enum MediumType { TELEPHONE_NUMBER("telephone_number"), POSTAL_ADDRESS("postal_address"); private String value; MediumType(String value) { this.value = value; } @JsonValue public String getValue() { return value; } }
内容的提问来源于stack exchange,提问作者Cesar Justo
相关产品推荐
相关产品推荐

