I've a parameterized interface:
public interface MyInterface<T> {
    void run(T e);
}
And classes implementing the interface:
public class MyClass1 implements MyInterface<SomeOtherClass1> {
    public void run(SomeOtherClass1 e) {
        // do some stuff with e
    }
}
public class MyClass2 implements MyInterface<SomeOtherClass2> {
    public void run(SomeOtherClass2 e) {
        // do some stuff with e
    }
}
The number of different MyClass*X* is known and exhaustive, and there is only one instance of each MyClass*X*, so I would like to use an enum:
public enum MyEnum {
    MY_CLASS_1,
    MY_CLASS_2;
}
To be able to use MyEnum.MY_CLASS_1.run(someOtherClass1); for example (I would then have every instance of MyInterface in one same place). Is it even possible (and if yes, how)? Because I'm quite stuck for now...
What I tried yet:
public enum MyEnum {
    MY_CLASS_1(new MyClass1()),
    MY_CLASS_2(new MyClass2());
    private MyInterface<?> instance;
    private MyEnum(MyInterface<?> instance) {
        this.instance = instance;
    }
    public void run(/* WhichType? */ e) {
        instance.run(e);
    }
}
In the above method, when using the type Object for the e parameter:
public void run(Object e) {
    instance.run(e);
    //       ^^^
    // The method run(capture#3-of ?) in the type MyInterface<capture#3-of ?> is not applicable for the arguments (Object)
}
The problem I think is with that private MyInterface<?> instance field: I need to know how is the instance parameterized, using something like private MyInterface<T> instance, but I can't find a working solution...
In short, I'm stuck ;)
PS: since the run methods bodies can be quite long, I'm trying to avoid anonymous classes within the enum:
public enum MyEnum {
    MY_CLASS_1 {
        /* any method, etc. */
    },
    MY_CLASS_2 {
        /* any method, etc. */
    },
}
MyEnum would then become totally unreadable.
solutionworkaround if I don't want to redesign the job... But I guess I would better redesign it without an enum ;) Thank you anyway, such a shame enums can't manage these kinds of generics! – sp00m Jan 08 '14 at 08:51