我有这样的通用接口:
interface A<T> {
T getValue();
}
Run Code Online (Sandbox Code Playgroud)
此接口具有有限的实例,因此最好将它们实现为枚举值.问题是那些实例有不同类型的值,所以我尝试了以下方法,但它不编译:
public enum B implements A {
A1<String> {
@Override
public String getValue() {
return "value";
}
},
A2<Integer> {
@Override
public Integer getValue() {
return 0;
}
};
}
Run Code Online (Sandbox Code Playgroud)
对此有何想法?
我有一个参数化的界面:
public interface MyInterface<T> {
void run(T e);
}
Run Code Online (Sandbox Code Playgroud)
和实现接口的类:
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
}
}
Run Code Online (Sandbox Code Playgroud)
不同的MyClass*X*的数量是已知且详尽的,并且每个MyClass*X*只有一个实例,所以我想使用枚举:
public enum MyEnum {
MY_CLASS_1,
MY_CLASS_2;
}
Run Code Online (Sandbox Code Playgroud)
为了能够使用MyEnum.MY_CLASS_1.run(someOtherClass1);例如(我会将MyInterface的每个实例放在同一个地方).甚至可能(如果是的话,如何)?因为我现在很困惑......
我还尝试了什么:
public enum MyEnum {
MY_CLASS_1(new MyClass1()),
MY_CLASS_2(new MyClass2());
private MyInterface<?> instance;
private MyEnum(MyInterface<?> instance) {
this.instance = instance;
}
public …Run Code Online (Sandbox Code Playgroud)