Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ByteBuddy从已创建的类创建类_Java_Byte Buddy - Fatal编程技术网

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
的第二个参数,您可以绕过它