0

所以我知道关于覆盖“toString”来查看你想要什么而不是类型的事情,但在我的情况下,整体情况是:

Project1:ClassA使用Project2:ClassB我包含Project2Project1类路径中的地方,编译工作正常。但是,Project2:ClassB.toString()打印project2.package.classC而不是classB的classC元素。

请注意,一旦我将 classB 复制到 project1 中,打印工作正常并且我看到了元素。

这是我在当前 project1 中使用的 project2 中的 classB 的快照:

package edu.cs;
public class FeatureWeightArrayWritable implements Writable {//classB

    public int vectorSize;
    public FeatureWeight[] vector; //classC = FeatureWeight

    @Override
    public String toString() {
        StringBuilder buffer = new StringBuilder();
        for (int i = 0; i < this.vectorSize; i++)
            buffer.append(vector[i].feature + " " + vector[i].weight);
        // return buffer.toString();
        return "Can't see this !!! I see edu.cs.FeatureWeight@32829 ";
    }
}

如果你怀疑FeatureWeight类,我也会覆盖它的 toString,但如果我有上面的返回消息,它甚至不应该被使用。有什么线索吗?

这是我的阅读方式:

Reader reader = new SequenceFile.Reader(fs, inputPath, conf);

Writable key = (Writable) reader.getKeyClass().newInstance();
FeatureWeightArrayWritable value = new FeatureWeightArrayWritable();

while (reader.next(key, value))     
    System.out.println("key:" + key.toString() + ", value:" + value.toString());
4

1 回答 1

0

检查您的类路径,并确保您没有另一个副本(旧的类文件、jar 文件、第三个项目等)FeatureWeightArrayWritable放置在某个地方。

于 2012-08-02T23:56:25.410 回答