Java ByteBuddy从已创建的类创建类
我有一个带有一些方法(未知计数)的Java ByteBuddy从已创建的类创建类,java,byte-buddy,Java,Byte Buddy,我有一个带有一些方法(未知计数)的接口 我想用方法创建另一个接口,它将具有相同的名称和参数类型,但不具有返回类型 然后,我想使用第二个创建的接口通过byteBuddy创建一个新的类。但是当我使用创建的接口创建一个新接口时,我得到 IllegalStateException:找不到的类文件 第二界面 示例代码: Class<?> clazz = new ByteBuddy() .makeInterface() .name("secondInterface") .
接口
我想用方法创建另一个接口
,它将具有相同的名称和参数类型,但不具有返回类型
然后,我想使用第二个创建的接口
通过byteBuddy
创建一个新的类
。但是当我使用创建的接口创建一个新接口时,我得到
IllegalStateException:找不到的类文件
第二界面
示例代码:
Class<?> clazz
= new ByteBuddy()
.makeInterface()
.name("secondInterface")
.make()
.load(classLoader)
.getLoaded();
for (Method method : FirstInterface.class.getMethods()) {
Class<?>[] classes = method.getParameterTypes();
List<Class<?>> classList = new ArrayList<Class<?>>(Arrays.asList(classes));
classList.add(Object.class);
clazz
= new ByteBuddy()
.rebase(clazz)
.defineMethod(method.getName() + "Reverse", Void.class, Modifier.PUBLIC)
.withParameters(classList)
.withoutCode()
.make()
.load(classLoader)
.getLoaded();
}
类clazz
=新的ByteBuddy()
.makeInterface()
.name(“第二接口”)
.make()
.load(类加载器)
.getLoaded();
for(方法:FirstInterface.class.getMethods()){
Class[]classes=method.getParameterTypes();
List>(Arrays.asList(classes));
添加(Object.class);
克拉兹
=新的ByteBuddy()
.rebase(clazz)
.defineMethod(method.getName()+“Reverse”、Void.class、Modifier.PUBLIC)
.withParameters(类列表)
.without代码()
.make()
.load(类加载器)
.getLoaded();
}
我做错了什么?是否允许byteBuddy从刚创建的另一个类创建一个类?如果要重新设置类的基址,则要编辑其已存在的类文件,其中保留了所有现有方法。这真的是你想要做的吗?我宁愿定义一个新接口并向其添加方法,这样您就不会遇到异常
您看到此错误的原因是,您正在使用类加载器加载接口,该类加载器不保留原始字节码作为将来编辑所需的资源。提供ClassLoadingStrategy.Default.WRAPPER\u PERSISTENT
作为load
的第二个参数,您可以绕过它