以下情况
此接口
public Interface ObjectService<T> {
public T fromMNO(MNO<T> mno);
}
被这个抽象类使用
public AbstractObjectService<T> implements ObjectService<T> {
public abstract T fromMNO (MNO<T> mno);
}
在此类中实现
public DummyService extends AbstractObjectService<DummyObj> {
@Override
public DummyObj fromMNO (DummyMNO mno) {
//do stuff
return new DummyObj();
}
}
使用该接口和接口对象
public interface MNO<T> {}
public class DummyMNO implements MNO<DummyObj> {}
和一个普通物体
public class DummyObj {}
现在的问题是:DummyService#fromMNO
在类型不匹配的VS代码bc中被标记为不可重写。
但据我所知,DummyService
与T
作为DummyObj
的结果是public DummyObj fromMNO (MNO<DummyObj> mno)
和DummyMNO
是一个MNO<DummyObj>
?
是我错了还是有什么可疑的?
一个“解决方案”是保持“原始类型”并像这样强制转换
@Override
public DummyObj fromMNO<T> (MNO<DummyObj> mno) {
DummyMNO d = (DummyMNO) mno;
//do stuff
return new DummyObj();
}
这解决了错误的问题,但是破坏了我想要实现的显式类型。
2条答案
按热度按时间cuxqih211#
正如@ Seelenhuose所指出的,是的,不可能改变函数的签名。
但是,可以使用以下命令更改所需的类型
zqry0prt2#
您在DummyService类中覆盖的fromMNO方法与AbstractObjectService中的fnoMNO类型不匹配。
解决方案之一是您已经在DummyService类的方法中输入了更改参数的问题,您可以这样做...
否则,您可以在AbstractObjectService中更改原始类型