У меня есть список объектов, которые расширяют другой класс:
List<? extends Fruit> arguments;
Теперь я хочу вызвать метод для этих объектов. Вызывающий класс имеет метод wash
для каждого из классов, которые расширяют Fruit
, но НЕ для абстрактного класса Fruit
:
void wash( Apple a);
void wash( Peach p);
Как я могу применить метод для всех элементов в arguments
? Это НЕ работает, так как мои методы стирки не принимают аргументы Fruit
:
for( Fruit f: arguments)
this.wash( f); // the wash() method is not a member of Fruit
Есть ли способ решить это без необходимости создания зонтичного метода wash( Fruit)
? Потому что существуют десятки методов wash( ? extends Fruit)
...
.
EDIT: "Вызывающий класс", о котором я говорю, является посетителем. И я не могу изменить какой-либо из классов Fruit
/subclasses. Я могу запрограммировать посетителя. Это означает, что невозможно добавить метод wash()
(или любые другие методы, если на то пошло) к абстрактному классу Fruit
.