Automated delegation in JavaАвтоматического наследования новообращенных делегации
В приведенной выше ссылке, пользователь задает подобный вопрос, но ответ дал требуется использование отражения.
Мой вопрос заключается в том, является ли инструмент рефакторинга, который автоматически автоматически сгенерирует весь однострочный метод для каждого из классов делегирования.
Intellij предлагает инструмент «Заменить наследование с делегированием», но он не выполняет работу должным образом - когда я использую его, создается большой беспорядок дублирующих методов и другое странное поведение, что делает его хуже, чем его выполнение вручную (Я думаю, это потому, что несколько интерфейсов он пытается делегировать, которые сталкиваясь друг с другом и в результате чего весь беспорядок.
могу ли я делать это неправильно или, возможно, это ошибка или ограничение в IntelliJ?
Любое решение, которое я могу вместо того, чтобы тратить время на копирование кода?
EDIT:
Я изолировал проблему как последуйте (каждый класс в отдельном файле, конечно):
class TestClass extends MyClass {
void function() {}
}
class MyClass extends MyAbstractClass implements MyInterface {
@Override
void function() {}
}
abstract class MyAbstractClass {
abstract void function();
}
interface MyInterface {
void function();
}
Теперь, если я использую «Заменить Наследование с делегацией» на TestClass я получаю следующий результат:
class TestClass implements MyInterface {
private final MyMyClass myClass = new MyMyClass();
void function() {
myClass.function();
}
void function() {
myClass.function();
}
private class MyMyClass extends MyClass {
void function() {}
}
}
Так функция() появляется дважды, что я считаю, не следует, так как, естественно, код не может скомпилировать с двумя функции с одинаковой подписью, заставляя меня вручную удалить один из них, который является утомительным с реальными классами со многими функции с одной и той же сигнатурой
Попробуйте его, например, с помощью MyClass<E> extends HashSet<E>
и посмотрите, что это за беспорядок. Я мог бы выбрать конкретные функции для делегирования и убедиться, что я не выбираю только один метод с идентичными сигнатурами, но это делает весь этот рефакторинг бессмысленным - мне было бы быстрее просто написать функции переадресации ...
Это не _seem_, как это должно быть намного труднее написать, чем другие IDE-объекты, которые реализуются, как intellitype. «Ошибка в IntelliJ» - это мой коленный рывок. – Vyross
Невозможно сказать, является ли это ошибкой в IntelliJ, не видя кода, на котором вы ссылаетесь на рефакторинг. – yole
@yole Я добавил упрощенный пример кода – traveh