Bytebuddy-将子类归类为最终类

时间:2018-08-24 22:07:50

标签: java byte-buddy bytecode-manipulation final-class

我正在尝试编写一个如下所示的通用方法:

private static <T> Class<? extends T> immutableVersionOfClass(Class<T> clazz) {
    return new ByteBuddy()
            .subclass(clazz)
            .method(not(returns(VOID)))
            .intercept(to(GetterInterceptor.class))
            .method(returns(VOID))
            .intercept(to(SetterInterceptor.class))
            .make()
            .load(clazz.getClassLoader())
            .getLoaded();
}

但是当将最终类作为参数传递时,出现异常: java.lang.IllegalArgumentException: Cannot subclass primitive, array or final types 我希望我的方法能够继承最终类。有没有解决此问题的方法?

1 个答案:

答案 0 :(得分:3)

没有办法对最终课程进行子类化。 language spec禁止使用。

ByteBuddy在很大程度上尊重语言规范,因此,即使您想扩展最终的类,也无法做到,除非您能够操纵要覆盖的类的字节码,使它们成为 not final,尽管那时您正在弄乱您本不应该的东西。