Bytebuddy - подкласс финального класса - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь написать общий метод, который выглядит следующим образом:

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 голосов
/ 25 августа 2018

Не существует способа выделить подкласс для окончательного класса.Это запрещено языковой спецификацией .

ByteBuddy в значительной степени уважает спецификацию языка, поэтому даже если вы хотите расширить конечный класс, вы не сможете, если не сможете манипулировать байтовым кодомкласса, который вы хотели переопределить, чтобы быть , а не final, хотя в этот момент вы возитесь с вещами, которые вы действительно не должны быть.

...