我正在尝试编写一个如下所示的通用方法:
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
我希望我的方法能够继承最终类。有没有解决此问题的方法?
答案 0 :(得分:3)
没有办法对最终课程进行子类化。 language spec禁止使用。
ByteBuddy在很大程度上尊重语言规范,因此,即使您想扩展最终的类,也无法做到,除非您能够操纵要覆盖的类的字节码,使它们成为 not final
,尽管那时您正在弄乱您本不应该的东西。