Встречается на собеседованиях • сегодня

Как подменить один класс другим

В Java можно подменить класс на этапе загрузки с помощью кастомного ClassLoader, либо во время выполнения через инструментацию байткода (например, с помощью библиотеки Byte Buddy или ASM).

Пример подмены через ClassLoader:

java
class CustomClassLoader extends ClassLoader {
    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        if (name.equals("com.example.Original")) {
            byte[] bytes = loadModifiedClassBytes();
            return defineClass(name, bytes, 0, bytes.length);
        }
        return super.findClass(name);
    }
}

Для подмены в runtime можно использовать Java Agent и трансформацию классов:

java
public static void premain(String args, Instrumentation inst) {
    inst.addTransformer((loader, className, classBeingRedefined, 
                       protectionDomain, classfileBuffer) -> {
        if (className.equals("com/example/Original")) {
            return modifyClass(classfileBuffer);
        }
        return null;
    });
}

Важно: подмена классов может нарушить безопасность и требует осторожности.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы