Представьте, что существует следующий класс:
public class Foo extends Spam{
public void bar(){};
//...many more useful functions...
}
Теперь мне нужно вот это:
public class Fooish extends Foo{
public static boolean whichDelegate; //true for 1, false for 2
Foo delegate1;
Foo delegate2;
}
Есть ли способ автоматически делегировать вызовы Java?
После просмотра многих других ответов здесь, на SO, я вижу три возможных способа, ни один из которых, похоже, не работает для моего конкретного варианта использования:
Просто переопределите все и самостоятельно выполните логику переключения
Проблема в том, что Foo - это класс, который сильно меняется. Это будет означать, что каждый раз, когда изменяется Foo, необходимо также изменять Fooish.
Хуже того, если бы он не был изменен и функция яйца () была добавлена в Foo, Fooish вызывал бы яйца сам, а не своим делегатам. Хаос...
-
Я хотел бы иметь возможность сделать это, но Foo - это конкретный класс, и перенос его функциональности в интерфейс кажется невозможным. Я не могу трогать Спам.
-
Имеет значительное влияние на производительность и труден для понимания другими. Вызовы делегатов, вероятно, не удастся найти с помощью eclipse, что ухудшит ремонтопригодность. Похоже, лучший выбор, но кажется раздражающим из-за того, что должно иметь решение во время компиляции.
Я также нашел это, но его на С #