Javassist生成的类中的匿名内部类问题

Javassist生成的类中的匿名内部类问题,java,javassist,Java,Javassist,我正在使用Javassist在运行时生成一些类,当我在这些类中创建匿名内部类时,它们会在尝试实例化封闭对象时崩溃(据我所知) 我已经尝试实现我正在尝试做的事情的最简单版本 我定义了3类,如下所示: public class A { public int method() { return 1; } } public class B extends A { } public class C extends A { public int method(

我正在使用Javassist在运行时生成一些类,当我在这些类中创建匿名内部类时,它们会在尝试实例化封闭对象时崩溃(据我所知)

我已经尝试实现我正在尝试做的事情的最简单版本

我定义了3类,如下所示:

public class A {

    public int method() {
        return 1;
    }
}

public class B extends A {

}

public class C extends A {
    public int method() {
        return 5;
    }
}
ClassPool cp = ClassPool.getDefault();
CtClass cc = cp.get(C.class.getName());

cc.setName("newName");
cc.setSuperclass(cp.get(B.class.getName()));

B b = (B) cc.toClass().newInstance();

b.method();
我现在想做的是使用javassist(或者我猜是其他什么)来(在运行时)生成一个类,该类具有C的所有功能,但它扩展了B而不是a,对我来说这似乎是一件很好的事情,因为B扩展了a。目前我正在这样做:

public class A {

    public int method() {
        return 1;
    }
}

public class B extends A {

}

public class C extends A {
    public int method() {
        return 5;
    }
}
ClassPool cp = ClassPool.getDefault();
CtClass cc = cp.get(C.class.getName());

cc.setName("newName");
cc.setSuperclass(cp.get(B.class.getName()));

B b = (B) cc.toClass().newInstance();

b.method();
当我调用method()时,上面的代码可以正常工作,但是如果我在C的method()中实例化一个匿名内部类,如下所示:

public class C extends A {
    public int method() {
        try {
            return new Callable<Integer>() {

                @Override
                public Integer call() throws Exception {
                    return 5;
                }

            }.call();
        } catch (Exception e) {
            return 2;
        }
    }
}
public类扩展了{
公共int方法(){
试一试{
返回新的可调用(){
@凌驾
公共整数调用()引发异常{
返回5;
}
}.call();
}捕获(例外e){
返回2;
}
}
}

当我调用
method()
时,我得到
java.lang.NoSuchMethodError:C$1.(LnewName;)
错误。

虽然我希望有人能告诉我不同的情况,但我认为这在Javassist中可能不可能实现,我在Javassist教程的第4.7节中找到了以下几行内容:

“不支持内部类或匿名类。”


因此,我想我应该研究其他运行时类生成库

虽然我希望有人能告诉我不同的情况,但我认为这在Javassist中是不可能的,我在Javassist教程的第4.7节中找到了以下内容:

“不支持内部类或匿名类。”


所以我想我应该研究一下其他运行时类生成库

Javassist不支持非静态内部类。
方法见javadoc。

除非移动到anon内部类的顶层,否则无法解决问题。

Javassist不支持非静态内部类。
方法见javadoc。

除非您移动到anon内部类的顶层,否则您的问题将无法解决。

我不知道JavaAssist,但听起来它并没有创建匿名内部类。你为什么要这么做?这听起来像是有缺陷的对象继承设计的症状。是的,我正在做一些非常愚蠢的事情,我承认我可能不得不以不同的方式来做,但我想我可能askI不知道JavaAssist,但听起来好像它没有创建匿名内部类。你为什么要这么做?这听起来像是有缺陷的对象继承设计的症状。是的,我做了一件非常愚蠢的事情,我承认我可能不得不以不同的方式来做,但我想我可能会支持askInner类,但只支持静态类。有人知道是否有替代方法来处理非静态内部类吗?支持内部类,但是只有静态类,有人知道是否有其他方法可以使用非静态内部类吗?我尝试了makenestedclass API,它在CtClass对象中添加了类,但当我将CtClass对象转换为Class对象时,内部类不存在。据我所知,innerclass的字节码转换会有问题。我尝试了makenestedclass API,它在CtClass对象中添加了类,但当我将CtClass对象转换为Class对象时,内部类不存在。据我所知,innerclass的字节码转换将出现问题,请参见