Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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 使用比较器作为嵌入类,比较方法中的母类(在克隆中初始化)字段不可见_Java_Clone_Inner Classes_Comparator - Fatal编程技术网

Java 使用比较器作为嵌入类,比较方法中的母类(在克隆中初始化)字段不可见

Java 使用比较器作为嵌入类,比较方法中的母类(在克隆中初始化)字段不可见,java,clone,inner-classes,comparator,Java,Clone,Inner Classes,Comparator,我开发了一个名为CCMN的服务器到服务器协议,并为每个服务器缓存的消息制定了不同的丢弃策略。PEERSIM模拟器使用CCMN协议创建模板节点,然后克隆此模板节点 CCMN类包括不同的数据结构,用于维护实现丢弃策略所需的状态。例如,Pmap将内容标识符解析为内容对象,并将内容标识符的频率设置为内容对象的使用次数 public HashMap <String, Content> Pmap; public HashMap<String, Integer> freq; 低频率=

我开发了一个名为CCMN的服务器到服务器协议,并为每个服务器缓存的消息制定了不同的丢弃策略。PEERSIM模拟器使用CCMN协议创建模板节点,然后克隆此模板节点

CCMN类包括不同的数据结构,用于维护实现丢弃策略所需的状态。例如,Pmap将内容标识符解析为内容对象,并将内容标识符的频率设置为内容对象的使用次数

public HashMap <String, Content> Pmap;
public HashMap<String, Integer> freq;
低频率=新低频率(); av.raw\u drop=新的优先级队列(1,频率较低); } 比较国声明如下:

public class lfu implements Comparator<String> {
通过调试,我发现add对第一个元素有效,但在添加第二个元素时会出现异常。我跟踪了compare方法的异常,通过检查变量,我发现freq变量(以及clone方法中初始化的其他变量)等于null,而构造函数中定义的变量定义良好

此外,在add调用之前,我检查freq是否初始化良好

我想在将比较器定义为嵌入式类和克隆方法之间存在一个问题

欢迎任何帮助


关于,Mohamed

可以,但这不会改变问题的任何方面,因为问题是在比较方法中没有初始化freq

我已经解决了这个问题。事实上,嵌套的比较器引用的是模板实例,而不是克隆的实例。我添加了一个计数器,以便第一次,指令
raw\u drop.add(ct.getID())
所属的方法被称为实例使用的优先级队列,以便进行正确的初始化。

很抱歉,有一个非常相关的注释,但是为什么要使用这样奇怪的比较器呢?写return freq.get(s0)compareTo(freq.get(s1));,难道不容易吗?
public class lfu implements Comparator<String> {
raw_drop.add(ct.getID());