Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Generics:尝试在参数中包含genrics的接口中实现定义的方法时发生编译错误_Java_Generics - Fatal编程技术网

Java:Generics:尝试在参数中包含genrics的接口中实现定义的方法时发生编译错误

Java:Generics:尝试在参数中包含genrics的接口中实现定义的方法时发生编译错误,java,generics,Java,Generics,我正在尝试使用setter方法编写一个接口,该方法将树映射作为参数 该树映射可以具有从AbstractNResource类派生的类的对象。AbstractNResource的类定义是使用泛型编写的,以允许它从另外两个类层次结构中接收两个参数 我在编译器将接受的接口中编写setter方法时遇到困难 这是接口(带有编译错误),我称之为IDataLoader: public interface IDataLoader { public abstract void setFrameDa

我正在尝试使用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);
}    
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的其他子级的形式可以作为返回类型,但不能作为方法参数。