ByteBuddy如何定义具有抽象方法的枚举?
创始人
2025-01-12 21:30:34
0

Byte Buddy可以通过使用EnumDefinition来定义具有抽象方法的枚举,并将抽象方法的实现委托给枚举值。下面是一个示例:

Class dynamicEnum = new ByteBuddy()
        .makeEnumeration("MyEnum")
        .withModifiers(Modifier.PUBLIC)
        .withValues("VALUE_1", "VALUE_2")
        .defineMethod("abstractMethod", String.class, Modifier.ABSTRACT | Modifier.PUBLIC)
        .make()
        .load(getClass().getClassLoader())
        .getLoaded();

Enum value1 = (Enum) dynamicEnum.getDeclaredField("VALUE_1").get(null);
Enum value2 = (Enum) dynamicEnum.getDeclaredField("VALUE_2").get(null);

Class enumClass = (Class) dynamicEnum;

Class anonymousType = new ByteBuddy()
        .subclass(Object.class)
        .implement(enumClass, TypeDescription.Generic.Builder.parameterizedType(enumClass))
        .method(not(isDeclaredBy(Object.class)))
        .intercept(MethodDelegation.toField("delegate"))
        .make()
        .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION)
        .getLoaded();

Object delegate = new ByteBuddy()
        .subclass(Object.class)
        .implement(enumClass.getDeclaredMethod("abstractMethod").getReturnType())
        .name("MyDelegate")
        .method(ElementMatchers.isDeclaredBy(enumClass))
        .intercept(FixedValue.value("Hello world"))
        .make()
        .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
        .getLoaded()
        .newInstance();

Field delegateField = anonymousType.getDeclaredField("delegate");
delegateField.setAccessible(true);
delegateField.set(null, delegate);

Enum myEnum = (Enum) anonymousType.getEnumConstants()[0];
myEnum.name(); // "VALUE_1"
myEnum.ordinal(); // 0
myEnum.getClass(); // class MyEnum
myEnum.toString(); // "VALUE_1"
myEnum.getDeclaredMethod("abstractMethod").invoke(myEnum); // "Hello world"

上述代码通过使用Byte Buddy定义了一个名为“MyEnum”的枚举,该枚举具

相关内容

热门资讯

黑科技中牌率!(WPk)透视辅... 《黑科技中牌率!(WPk)透视辅助工具,(wpK)最初存在有挂,2025新版总结(有挂神器)》 wp...
德扑之星系统发牌机制!wepo... 德扑之星系统发牌机制!wepoke软件收费吗,aapoker有猫腻吗,2025新版技巧(一贯有挂);...
黑科技透明挂!(WPK)透视辅... 黑科技透明挂!(WPK)透视辅助工具,(wpK)原生真的有挂,规律教程(有挂透明)准备好在wpK i...
wepoke透明挂是真的吗!w... 1、wepoke透明挂是真的吗!wepoke是什么软件,wpk微扑克最新辅助,wpk教程(一直真的有...
黑科技安卓版!(微扑克)透视辅... 黑科技安卓版!(微扑克)透视辅助app,(微扑克)真是真的有挂,微扑克教程(有挂方法);人气非常高,...
苹果菠萝德州辅助神器!wepo... 苹果菠萝德州辅助神器!wepower怎么设置德州,德扑统计软件,靠谱教程(往昔真的有挂)1、很好的工...
黑科技系统!(微扑克)透视辅助... 黑科技系统!(微扑克)透视辅助app,(微扑克wpk)切实真的是有挂,揭秘教程(有挂技巧)是一款可以...
微扑克有挂么!德扑之星系统发牌... 自定义德扑之星系统发牌机制系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,...
黑科技挂!(wepoker)软... 黑科技挂!(wepoker)软件透明挂,(wePOke)竟然是有挂,攻略方法(有挂软件)是一款可以让...
德州之星辅助挂!菠萝德州辅助软... 德州之星辅助挂!菠萝德州辅助软件,wpk线上代打,普及教程(从前有挂);《WPK辅助透视》‌:支持手...