Всем добрый день. К примеру есть у меня лишь интерфейс, без реализации каким-либо классом. Имеется ли какая-то возможно создать прокси класс на основе этого интерфейса, без необходимости создания экземпляра класса, реализующего этот интерфейс?
без необходимости создания экземпляра класса, реализующего этот интерфейс?
Прокси класс и будет классом, реализующим интерфейс. Отличие от реализации обычного класса в том, что его создание происходит в runtime.
Proxy:
A dynamic proxy class (simply referred to as a proxy class below) is a class that implements a list of interfaces specified at runtime when the class is created, with behavior as described below. A proxy interface is such an interface that is implemented by a proxy class. A proxy instance is an instance of a proxy class.
Реализация всех методов интерфейсов прокси определяется в экземпляре класса InvocationHandler
.
Например у меня есть интерфейс с 2 методами:
private interface Foo {
void method1();
void method2();
void method3();
}
Я хочу создать прокси, который бы реализовывал method1
, а на все остальные ничего не делал (либо бросал исключение, что метод не реализован). Это можно сделать, например, так:
public static void main(String... arg) {
Foo foo = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class[]{Foo.class}, (proxy, method, args) -> {
switch (method.getName()) {
case "method1":
System.out.println("method1");
return null;
default:
break;
}
throw new RuntimeException(method.getName() + " is not implemented");
});
foo.method1();
foo.method2();
}
Результат выполнения:
method1
Exception in thread "main" java.lang.RuntimeException: method2 is not implemented
...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Считал файл nameTIF с изображением и поместил его в буфер для изображения:
Сделал downgrade Java 9 to Java 8Системные переменные не обновились полностью
Нужно ли проверять вызов исключения путем замены локальной переменной File