【问题标题】:How to understand the error message for this code snippet?如何理解此代码段的错误消息?
【发布时间】:2011-08-02 03:35:37
【问题描述】:

我需要使用开源软件 mahout 开展一个项目。一个示例程序 如下。

import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.impl.common.FastIDSet;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
public class GenderItemSimilarity implements ItemSimilarity {

   private final FastIDSet men;
   private final FastIDSet women;
   public GenderItemSimilarity(FastIDSet men, FastIDSet women) {
       this.men = men;
       this.women = women;
   }

   public double itemSimilarity(long profileID1, long profileID2) {
      Boolean profile1IsMan = isMan(profileID1);
      if (profile1IsMan == null) {
      return 0.0;
   }
   Boolean profile2IsMan = isMan(profileID2);
      if (profile2IsMan == null) {
        return 0.0;
      }
   return profile1IsMan == profile2IsMan ? 1.0 : -1.0;
   }

 public double[] itemSimilarities(long itemID1, long[] itemID2s) {
    double[] result = new double[itemID2s.length];
    for (int i = 0; i < itemID2s.length; i++) {
     result[i] = itemSimilarity(itemID1, itemID2s[i]);
    }
   return result;
 }

private Boolean isMan(long profileID) {
  if (men.contains(profileID)) {
  return Boolean.TRUE;
 }
if (women.contains(profileID)) {
    return Boolean.FALSE;
  }
   return null;
}

public void refresh(Collection<Refreshable> alreadyRefreshed) {
  // do nothing
 }
}

eclipse编译器给出错误信息如

GenderItemSimilarity 类型必须实现继承的抽象方法 ItemSimilarity.allSimilarItemIDs(long)

在我看来,这个错误信息表明存在一个类 ItemSimilarity,它有一个 allSimilarItemIDs(long) 的方法。但是,目前的程序没有这种方法。我的分析正确吗?添加这种方法会解决问题吗?

【问题讨论】:

    标签: java eclipse mahout


    【解决方案1】:

    你是对的,ItemSimilarity 类声明了一个名为allSimilarItemIDs 的抽象方法。在实现此类时,您必须在类中为该抽象方法定义方法体。

    【讨论】:

    • (或者也让你的类抽象,这样它就变成了实现你的类的人的责任,但这可能不是你想做的)。
    【解决方案2】:

    这是 Mahout in Action 一书中的 sn-p。 (我是作者。)我认为这不是本书随附的完整、最新的源代码。确保获得最新的,目前不在曼宁,但生活(并将生活)在Github

    【讨论】:

    • 谢谢,肖恩。是的,这就是 Mahout in Action 中的代码。我正在尝试学习它并开始基于 Mahout 开展我的项目。我会从 Github 上查看最新的代码。
    【解决方案3】:

    从错误消息中我们可以了解到 ItemSimilarity 接口有一个名为 allSimilarItemIDs(long) 的方法,我们也需要处理它..

    仅用于测试目的,通过添加一个简单的打印语句来实现此方法。 如果它解决了这个问题,那么我们可以很容易地理解问题是什么..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      相关资源
      最近更新 更多