Bytebuddy - подкласс финального класса
Я пытаюсь написать общий метод, который выглядит следующим образом:
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 ответ
Нет никакого способа подкласса окончательного класса. Это запрещено языковой спецификацией.
ByteBuddy в значительной степени уважает спецификацию языка, поэтому даже если вы захотите расширить конечный класс, вы не сможете, если не сможете манипулировать байтовым кодом класса, который хотите переопределить, чтобы не бытьfinal
, хотя в этот момент вы возитесь с вещами, которыми вы действительно не должны быть.