Возможно ли наследовать конечный класс, используя манипуляции с байт-кодом?Можно ли как-то наследовать последний класс, изменяющий байт-код?
ответ
Да и нет.
Вы можете использовать манипуляции с байт-кодом, чтобы изменить класс final
на final
на лету. Это даже не нарушает двоичную совместимость, поэтому нет риска ошибок загрузчика/верификации класса.
Однако вы должны применить модификации байт-кода к самому классу final
. Вы не можете манипулировать байт-кодом в дочернем классе, чтобы наследовать его от родительского класса final
. Точнее, если вы сделаете это, модифицированный дочерний класс будет отклонен верификатором при загрузке вместе с родительским классом final
.
Если вы хотите получить конкретную ссылку - раздел 4.1 JVMS, стр. 73 - «Ни один из прямых суперклассов, ни любой из его суперклассов могут иметь флаг ACC_FINAL, установленный в элементе access_flags его структуры ClassFile». – Antimony
JLS также упоминает об этом - http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.4.2 –
Но вопрос задан об обработке байт-кода, и в этом случае JLS не имеет значения. Язык Java имеет множество произвольных ограничений, которые отсутствуют на уровне байт-кода. – Antimony
This описывает формат файла класса. На смещении 10+cpsize
существует 2 байта, определяющих флаги доступа этого класса. Один из этих флагов называется ACC_FINAL (0x0010). Я полагаю, вы можете замаскировать этот бит и сделать этот класс не финальным.
- 1. android: Можно ли наследовать класс MainActivity?
- 2. Можно ли наследовать XAML?
- 3. Как наследовать/заменить последний класс java?
- 4. Можно ли наследовать python @classmethod?
- 5. Можно ли наследовать от MKPolyline
- 6. Можно ли наследовать правило CSS?
- 7. можно ли наследовать частный класс, но сделать его общедоступным?
- 8. Можно ли «наследовать» тесты с помощью xUnit.net?
- 9. Возможно ли класс наследовать annotaions из суперкласса
- 10. Может ли класс наследовать функцию __init __()? (Python)
- 11. Может ли класс наследовать свойства namedtuple?
- 12. Можно наследовать от SPWeb?
- 13. Можно ли наследовать от объекта функции javascript?
- 14. Можно ли наследовать без инкапсуляции в java?
- 15. Можно ли наследовать глобальные переменные Ruby?
- 16. SELinux - Можно ли наследовать из домена?
- 17. Как наследовать класс WizardResourceImportPage?
- 18. В Java можно наследовать класс, предоставляемый параметром типа?
- 19. Как наследовать класс #include?
- 20. Наследовать класс через модули?
- 21. Как наследовать класс RuntimeException?
- 22. Как наследовать класс?
- 23. Наследовать класс конструктору
- 24. Может ли класс webservice наследовать класс страницы asp.net
- 25. Наследование MultiLevel, может ли класс C наследовать класс A?
- 26. Может ли вложенный класс C++ наследовать свой охватывающий класс?
- 27. дата както weekOfYear
- 28. Можно ли наследовать от класса расширения в ODOO?
- 29. Можно ли добавить класс только с CSS?
- 30. Наследовать Java-класс от Luaj
Не будет ли «композиция вместо наследования» решить вашу проблему? Не могли бы вы использовать класс-оболочку для того, что вы пытаетесь сделать? Пожалуйста, разместите некоторые детали, очень сложно что-то посоветовать, если будет доступно небольшое количество информации ... (и vikingsteve прав!) – ppeterka
'final' обычно есть по какой-то причине ... – vikingsteve
В каком классе вы пытаетесь наследовать? Один из стандартных библиотечных? –