我正试图用setter方法编写一个接口,该方法将TreeMap作为参数。
TreeMap可以具有从AbstractNResource类派生的类的对象。AbstractNResource的类定义是用泛型编写的,它可以接受来自另外两个类层次结构的两个参数。
我在接口中编写编译器将接受的setter方法时遇到了问题。
这是接口(带有编译错误),我称之为IDataLoader:
public interface IDataLoader {
public abstract void setFrameDataMap(
// Compile Error: Syntax error on token "extends", , expected
TreeMap<Long, AbstractNResource<AbstractNRequestableResourceData, INDescriptor>.AbstractFrameData> frameDataMap);
}
这是TreeMap可以拥有的对象类型的父类:
public abstract class AbstractNResource<T extends AbstractNRequestableResourceData, D extends INDescriptor>
extends
AbstractVizResource<AbstractNRequestableResourceData, IDescriptor>
implements INResource {
public abstract class AbstractFrameData {}
protected TreeMap<Long, AbstractFrameData> frameDataMap;
}
下一步,我有一个AbstractDataLoader类,它部分实现了接口IDataLoader:
public abstract class AbstractDataLoader<T extends AbstractNatlCntrsRequestableResourceData, D extends INatlCntrsDescriptor>
implements
IDataLoader<AbstractNatlCntrsRequestableResourceData, INatlCntrsDescriptor> {}
我还有一个WaveSatDataLoader类,它扩展了那个抽象类。这就是发生编译错误的地方:
public class WaveSatDataLoader extends
AbstractDataLoader<WaveSatResourceData, NCMapDescriptor> {
@Override
public void setFrameDataMap(TreeMap<Long,AbstractNatlCntrsResource<WaveSatResourceData, NCMapDescriptor>.AbstractFrameData> frameDataMap) {
System.out.println("To do");
}
}
编译错误为:
方法setFrameDataMap(TreeMap.AbstractFrameData>)WaveSatDataLoader类型的必须重写或实现超类型方法
我没有在AbstractDataLoading类中实现setFrameDataMap(),但在那里放一个并没有帮助。
我不明白编译器为什么抱怨。
如有任何帮助,将不胜感激
感谢
编译器抱怨,因为您试图用具有不同签名的方法实现接口方法。
在IDataLoader
中,setFrameDataMap
的自变量的第二种类型参数是
AbstractNResource<AbstractNRequestableResourceData, INDescriptor>.AbstractFrameData
而在CCD_ 3中它是
AbstractNatlCntrsResource<WaveSatResourceData, NCMapDescriptor>.AbstractFrameData
我还对IDataLoader
是否应该是泛型感到困惑。你已经写了
implements IDataLoader<AbstractNatlCntrsRequestableResourceData, INatlCntrsDescriptor>
然而在代码的第一部分中CCD_ 5不具有类型参数。