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, хотя в этот момент вы возитесь с вещами, которыми вы действительно не должны быть.

Другие вопросы по тегам