如何进行泛型的递归定义
大家好,最近写一个涉及泛型的测试,真是死的心都有:
遇到如下问题,请高手指正:
1
public interface ILogicalProcess <LP,S extends AbstractState> extends IModel {
声明了这样一个接口,
但是在使用时,我希望把LP替换为一个ILogicalProcess类型,但似乎进入了一个递归的定义。。。。,这样做是否合法,如果不合法,那么如何定义呢
这样写
ILogicalProcess <ILogicalProcess <ILogicalProcess <LP。。。。,S extends AbstractState>
晕了,
2 父类型参数不能用子类替换的问题:
我声明了如下的类,
public class simpleLogicalProcess <LP,S extends AbstractState> extends
LogicalProcess <LP,S>{
其中,一个函数changestate可以返回AbstractState类型的数据,
而另一个函数setInnerstate可以接受S类型的数据,但我在进行如下调用时
setInnerstate(((SimpleEvent)event).changestate(this.getInnerstate()));
居然报错:
The method setInnerstate(S) in the type simpleLogicalProcess <LP,S> is
not applicable for the arguments (AbstractState)
不会吧。。。
Java code
public class simpleLogicalProcess<LP,S extends AbstractState> extends
LogicalProcess<LP,S>{
//WB do i really need the flexibility?
private S innerstate;
public simpleLogicalProcess() {
super();
// TODO Auto-generated constructor stub
}
public simpleLogicalProcess(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public ArrayList<LP> influenced() {
// TODO Auto-generated method stub
return super.influenced();
}
@Override
public ArrayList<IEvent<LP, ?, ?>> out() {
// TODO Auto-generated method stub
return super.out();
}
@Override
protected void sendEvent(IEvent<LP, ?, ?> event) {
// TODO Auto-generated method stub
super.sendEvent(event);
}
@Override
public void run(IEvent<?, ?, ?> event) {
// TODO Auto-generated method stub
if (event instanceof SimpleEvent)
{
setInnerstate(((SimpleEvent)event).changestate(this.getInnerstate()));
}
}
public S getInnerstate() {
return innerstate;
}
public void setInnerstate(S innerstate) {
this.innerstate = innerstate;
}
}
interface SimpleEvent extends IEvent{
public AbstractState changestate(AbstractState raw);
}
|