I have a List of objects that extend another class:

List<? extends Fruit> arguments;

Now, I want to invoke a method on these objects. The invoking class has a method wash for each of the classes that extend Fruit, but NOT for the Fruit abstract class:

void wash( Apple a);
void wash( Peach p);

How can I apply the method wash to all the elements in arguments? This DOESN'T work, as my wash methods don't accept Fruit arguments:

for( Fruit f: arguments)
    this.wash( f); // the wash() method is not a member of Fruit

Is there any way to solve this without having to make an umbrella method wash( Fruit)? Because there are dozens of wash( ? extends Fruit) methods...

.

EDIT: The "invoking class" I am talking about is a visitor. And I can't alter any of the Fruit classes/subclasses. I can only program the visitor. This means it isn't possible to add the wash() method (or any other methods, for that matter) to the abstract class Fruit.

Edit
Report