Java:Generics:尝试在参数中包含genrics的接口中实现定义的方法时发生编译错误
我正在尝试使用setter方法编写一个接口,该方法将树映射作为参数
该树映射可以具有从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");
}
}
编译错误是:
The method setFrameDataMap(TreeMap.AbstractFrameData>) of type WaveSatDataLoader must override or implement a supertype method
我没有在AbstractDataLoading类中实现setFrameDataMap(),但是在那里放一个没有帮助
我不明白为什么编译器在抱怨
任何帮助都将不胜感激
谢谢
# 1 楼答案
编译器正在抱怨,因为您试图用具有不同签名的方法实现接口方法
在
IDataLoader
中,setFrameDataMap
的参数的第二个类型参数是而在
WaveSatDataLoader
中它是我还对
IDataLoader
是否应该是泛型感到困惑。你已经写信了但是在代码的第一部分
IDataLoader
没有类型参数