1

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

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 我希望我的方法也能够对最终类进行子类化。这个问题有什么解决方法吗?

4

1 回答 1

3

没有办法对最终类进行子类化。语言规范禁止这样做。

ByteBuddy 很大程度上尊重语言规范,所以即使你想扩展一个 final 类,除非你能够将你想要覆盖的类的字节码操作为 not ,否则你不能这样做 final尽管那时你正在搞砸你真的不应该做的事情。

于 2018-08-24T22:17:57.037 回答