Динамически создавать реализацию из класса, который почти соответствует интерфейсу?

Скажем, у меня есть этот интерфейс:

public interface Foo {
  int getBar();
  String getName();
  // ... 10 other methods
}

И затем у меня есть этот класс, который я не могу изменить:

public final class FooImpl {
  int getBar();
  String getFirstName(); 
  String getLastName(); 
  // ... 10 other methods which matches Foo
}

Мне нужно использовать значение из FooImpl в методе, который принимает Foo. Достаточно просто написать оболочку вручную (например, с помощью анонимного класса), которая реализует Foo и пересылает все соответствующему методу в FooImpl (за исключением getName(), который требует некоторой дополнительной логики от getFirstName и getLastName). Есть ли способ (желательно из общей библиотеки, такой как Guava) для динамического создания такой оболочки с учетом того, что требование:

  • Я хочу указать пользовательскую логику для одного или двух методов
  • Для остальных просто перенаправьте методы с таким же именем

person user69715    schedule 12.12.2016    source источник
comment
Как бы мне ни было больно это предлагать... вы пробовали использовать динамический прокси?   -  person Joe C    schedule 13.12.2016


Ответы (1)


Есть способ. если вы создаете ссылку на объект вашего интерфейса, которая содержит ссылку на объект вашего класса, который реализует этот интерфейс. Затем эта ссылка на объект может получить доступ к этим вещам.

person Rahul Modak    schedule 12.12.2016