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