JavaRush /Курсы /Java Collections /Задачи | 2 уровень | 8 лекция

Задачи | 2 уровень | 8 лекция

Java Collections
2 уровень , 8 лекция
Открыта

— Привет, Амиго! Я придумал тебе пару интересных задач.

Решать их можно только в Intellij IDEA. Вот, смотри, какие интересные условия…

14
Задача
Java Collections, 2 уровень, 8 лекция
Недоступна
Создание прокси-объекта
Создание прокси-объекта
14
Задача
Java Collections, 2 уровень, 8 лекция
Недоступна
Дженерики для создания прокси-объекта
Дженерики для создания прокси-объекта
Комментарии (76)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Xan Уровень 36
21 января 2025
++
Мирослав Уровень 37 Expert
7 января 2025
Напомните пожалуйста когда нас учили public <T extends Item> T getProxy(Class<T> classType, Class... interfaces) и тому - System.arraycopy(interfaces, 0, interfacesArray, 1, interfaces.length); Допустим я изучая когда-то цепочку лекций про Дженерики (не углубился изучением <T extends Item> Но спустя х...у кучу задачек не помню чтоб делал так System.arraycopy(, , , ,); З.Ы 1-Ая задача про Создание прокси-объекта ГУД!!
Unholy intromen Уровень 1
2 марта 2024
Gans Electro Уровень 4
16 ноября 2023
Вызывал invoke передав в него proxy и ушло в рекурсию
wokku Уровень 51
9 июля 2023
Использование динамического прокси в Java обычно сводится к нескольким основным этапам: 1. Определение интерфейса: Динамический прокси в Java работает на основе интерфейсов. Вы должны определить интерфейс, который будет реализован динамическим прокси. 2. Создание обработчика вызовов (Invocation Handler): Обработчик вызовов – это объект, реализующий интерфейс java.lang.reflect.InvocationHandler. В этом объекте вы определяете логику, которая будет выполняться при вызове метода прокси. 3. Создание прокси: Прокси создается с помощью статического метода java.lang.reflect.Proxy.newProxyInstance(). Этому методу передаются загрузчик классов, интерфейсы, которые должен реализовать прокси, и обработчик вызовов.
wokku Уровень 51
9 июля 2023

import java.lang.reflect.*;

// 1. Определение интерфейса
interface MyInterface {
    void myMethod();
}

class MyObject implements MyInterface {
    public void myMethod() {
        System.out.println("Original method");
    }
}

// 2. Создание обработчика вызовов
class MyInvocationHandler implements InvocationHandler {
    private Object target;

    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before original method");
        Object result = method.invoke(target, args);
        System.out.println("After original method");
        return result;
    }
}

public class Main {
    public static void main(String[] args) {
        // Оригинальный объект
        MyInterface original = new MyObject();
        
        // 3. Создание прокси
        MyInterface proxy = (MyInterface) Proxy.newProxyInstance(
            MyInterface.class.getClassLoader(),
            new Class[] {MyInterface.class},
            new MyInvocationHandler(original)
        );
        
        proxy.myMethod(); // Выведет "Before original method", затем "Original method", затем "After original method"
    }
}
В этом примере при вызове proxy.myMethod() вместо непосредственного вызова оригинального метода вызывается метод invoke() обработчика вызовов. Внутри invoke() вызывается оригинальный метод, и перед и после этого выводятся сообщения.
Lt_Den Уровень 34
18 августа 2023
Сдал с первой попытки. Но в принципе сделал, как надо только благодаря тебе. Респект👍
Андрей Уровень 42
19 мая 2023
после 5 раз прочтения материала прочел еще 3 раза. вроде чуть прояснилось. на задачах поплавал, в итоге с помощником решил. не скажу что закрепилось.
Dmitriy Уровень 24
3 июля 2023
хз, решил с первого раза и все понял после прочтения вот этой статьи тык навряд ли конечно эта та вещь, которой будешь пользоваться каждый день, но знать и понимать точно нужно
a.shiba Уровень 26
13 февраля 2023
Интересный момент со второй задачей. Метод getProxy был объявлен приватным и валидатор его не находил пока не сделал его публичным.
Роман Уровень 33
8 января 2023
вот блин... как было в первый раз непонятно, так и сейчас непонятно...
Станислав Future Уровень 39
11 августа 2022
Во второй задаче обратите внимание на слово дополнительных интерфейсов, т.е. аргументом должны быть не только одни они. И еще валик пропускает без дженериков, только в правильном решении увидел, что ожидается решение с ними.
KirilX Уровень 51
9 августа 2022
Материал для решения задач https://javarush.com/groups/posts/2281-dinamicheskie-proksi