微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Byte Buddy 添加枚举值

如何解决使用 Byte Buddy 添加枚举值

假设我有一个像下面这样的枚举

public enum BindingType {
  BINDING_OPEN("M1+O","Open",true),BINDING_SAVE("M1+S","Save",...

  private BindingType(
       final String sequence,final String keyLabel,final boolean reserved) {
    this.sequence = sequence;
    this.keyLabel = keyLabel;
    this.reserved = reserved;
  }
}

在 JVM 启动时,我想添加一个额外的值,例如

BINDING_CUSTOM("M1+U","Custom",true)

这可以使用 Byte Buddy 的 AgentBuilder 来完成吗?

解决方法

枚举只不过是枚举类型的 public static final 字段。您当然可以为枚举类型声明这样一个字段,并通过 builder.executable(isTypeInitializer()) 检测静态初始值设定项,以通过调用类的构造函数将该字段设置为一个值。

此外,您可能需要检测类的 values 方法以返回具有其他值的附加常量,并使用 valueOf 方法解析附加常量。

枚举只是这种方法和字段组合的合成糖。 Byte Buddy 为创建新枚举提供了便利,但如果更改现有枚举,则需要采取一些手动步骤。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。