我正在研究一个预先存在的java程序,它的一个类计算一些布尔特征。它使用HashMap
来实现此功能,因此第一个参数是String
类型,第二个参数是Predicate
类型:
featureMap = new HashMap<String, Predicate<ChunkedBinaryExtraction>>
featureMap由一些字符串和Predicate值手动设置,这些值由一些私有方法定义和返回(例如:featureMap.put("extr phrase", extrCoversPhrase());
)。
我需要访问功能的值(第二个参数),所以我使用了这段代码:
Set set = featureMap.entrySet();
Iterator i = set.iterator();
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
它可以正确提取第一个参数但不提取第二个参数(特征'值)!它返回如下内容:
extr phrase: edu.washington.cs.knowitall.extractor.conf.ReVerbFeatures$11@36aa7bc2
me.getValue()
似乎不是检索功能的正确陈述。值?
答案 0 :(得分:1)
打印输出只是告诉您地图值是ReVerbFeatures类的对象。那个班级并没有覆盖&#34; toString()&#34;方法,因此给你一些不那么人类可读的输出。
但问题是:你手边有这个班级的对象。所以你可以施展它
ReVerbFeatures feature = (ReVerbFeatures) me.getValue();
然后然后调用该类的任何方法,例如。
正如其他人所说:阅读&#34;原始类型&#34;,如果可能的话,相应地更改该代码。
最后:如果你必须处理代码......那么除了学习所有涉及的概念之外别无他法。你不应该处理那些你不了解的东西。意思是:如果你有时间真正了解所有这些事情,你应该决定;或者现在停止做你正在做的事情。避免对某些事情负责......如果你缺乏真正负责的技能。