Java:Generics:尝试在参数中包含genrics的接口中实现定义的方法时发生编译错误
我正在尝试使用setter方法编写一个接口,该方法将树映射作为参数 该树映射可以具有从AbstractNResource类派生的类的对象。AbstractNResource的类定义是使用泛型编写的,以允许它从另外两个类层次结构中接收两个参数 我在编译器将接受的接口中编写setter方法时遇到困难 这是接口(带有编译错误),我称之为IDataLoader:Java:Generics:尝试在参数中包含genrics的接口中实现定义的方法时发生编译错误,java,generics,Java,Generics,我正在尝试使用setter方法编写一个接口,该方法将树映射作为参数 该树映射可以具有从AbstractNResource类派生的类的对象。AbstractNResource的类定义是使用泛型编写的,以允许它从另外两个类层次结构中接收两个参数 我在编译器将接受的接口中编写setter方法时遇到困难 这是接口(带有编译错误),我称之为IDataLoader: public interface IDataLoader { public abstract void setFrameDa
public interface IDataLoader {
public abstract void setFrameDataMap(
// Compile Error: Syntax error on token "extends", , expected
TreeMap<Long, AbstractNResource<AbstractNRequestableResourceData, INDescriptor>.AbstractFrameData> frameDataMap);
}
public abstract class AbstractDataLoader<T extends AbstractNatlCntrsRequestableResourceData, D extends INatlCntrsDescriptor>
implements
IDataLoader<AbstractNatlCntrsRequestableResourceData, INatlCntrsDescriptor> {}
公共接口IDataLoader{
公共摘要无效setFrameDataMap(
//编译错误:应为标记“扩展”上的语法错误
树映射(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;
}
公共抽象类AbstractNResource
延伸
抽象资源
在资源中实现{
公共抽象类AbstractFrameData{}
受保护的树映射frameDataMap;
}
下一步,我有一个AbstractDataLoader类,它部分实现了接口IDataLoader:
public interface IDataLoader {
public abstract void setFrameDataMap(
// Compile Error: Syntax error on token "extends", , expected
TreeMap<Long, AbstractNResource<AbstractNRequestableResourceData, INDescriptor>.AbstractFrameData> frameDataMap);
}
public abstract class AbstractDataLoader<T extends AbstractNatlCntrsRequestableResourceData, D extends INatlCntrsDescriptor>
implements
IDataLoader<AbstractNatlCntrsRequestableResourceData, INatlCntrsDescriptor> {}
公共抽象类AbstractDataLoader
工具
IDataLoader{}
再往下一步,我有一个类WaveSatDataLoader,它扩展了这个抽象类。这就是发生编译错误的地方:
public class WaveSatDataLoader extends
AbstractDataLoader<WaveSatResourceData, NCMapDescriptor> {
@Override
public void setFrameDataMap(TreeMap<Long,AbstractNatlCntrsResource<WaveSatResourceData, NCMapDescriptor>.AbstractFrameData> frameDataMap) {
System.out.println("To do");
}
}
公共类WaveSatDataLoader扩展
抽象数据加载器{
@凌驾
public void setFrameDataMap(树映射frameDataMap){
System.out.println(“待办事项”);
}
}
编译错误是:
方法
setFrameDataMap(TreeMap.AbstractFrameData>)
WaveSatDataLoader类型的必须重写或实现超类型
方法
我没有在AbstractDataLoading类中实现setFrameDataMap(),但是在那里放一个没有帮助
我不明白为什么编译器在抱怨
任何帮助都将不胜感激
谢谢编译器正在抱怨,因为您试图用具有不同签名的方法实现接口方法 在
IDataLoader
中,setFrameDataMap
参数的第二个类型参数为
AbstractNResource<AbstractNRequestableResourceData, INDescriptor>.AbstractFrameData
我还对IDataLoader
是否应该是泛型感到困惑。你已经写信了
implements IDataLoader<AbstractNatlCntrsRequestableResourceData, INatlCntrsDescriptor>
实现IDataLoader
但是在代码的第一部分中,
IDataLoader
没有类型参数。Hi Paul。关于您的第一条注释WaveSatResourceData,&NCMapDescriptor是AbstractNRequestableResourceData&INDescriptor的子项。我的印象是,在爪哇,让孩子们代替父母是一种犹太教。我试图重写接口IDataLoader方法来实现它。嗨,Paul,关于你的第二个评论,我把泛型放在IDataLoader的定义中,这样我就可以在那里用'T'和'D'来定义setFrameData,作为让IDataLoader编译并最终被重写(用于实现)的手段setFrameDataMap接受WaveSatResourceData和NCMapDescriptor以及AbstractNRequestableResourceData和Indescriptor的其他子级的形式可以作为返回类型,但不能作为方法参数。