我有一个框架,使用一个对象来维护其他对象之间的状态。我希望与状态交互的对象(“Actions”)可以通用地接受一个接口类型,该接口由State对象实现,但我在尝试实现时遇到了问题。
我想以特定的状态实现(或接口)来定义框架对象本身,并能够向其添加操作,只要它们直接或通过状态实现的接口接受已定义的状态即可。
据我所知,
这里是一个示例(不是完全编译的代码):
我想以特定的状态实现(或接口)来定义框架对象本身,并能够向其添加操作,只要它们直接或通过状态实现的接口接受已定义的状态即可。
据我所知,
<? super S>
的定义意味着“某些类型是S的父类”,但我不确定由S实现的接口是否符合此描述,因为它并不完全是一个父类。这里是一个示例(不是完全编译的代码):
Class Framework<State> {
addAction(Action<? super State> a) {} // adds to a list of actions to be run
run(State s) {
for(Action<? super State> a : actions) {
a.perform(s);
}
}
}
Interface IState1 {}
Interface IState2 {}
Interface Action<State> {
public void perform(State s);
}
Class Action1 implements Action<IState1> {}
Class Action2 implements Action<IState2> {}
Class CombinedState implements IState1, IState2 {}
public static void run() {
Framework<CombinedState> f = new Framework<CombinedState>();
// add is expecting Action<? super CombinedState> but getting Action<IState1>
f.add(new Action1()); // This doesn't seem to work
f.add(new Action2());
f.run(new CombinedState());
}
在泛型中,接口是否算作父类?有没有不需要反射就能实现的方法?
State
是什么?这就像说T
一样,还是State
是在某个地方定义的接口?请提供实际代码。 - Cratylus