You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:17:16