0

したがって、「toString」をオーバーライドして、タイプの代わりに必要なものを確認することについては知っていますが、私の場合、全体像は次のとおりです。

Project1:ClassAクラスパスProject2:ClassBに含めProject2た場所を使用すると、コンパイルは正常に機能しますが、classBのclassC要素の代わりに出力されます。Project1Project2:ClassB.toString()project2.package.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 ファイル、3 番目のプロジェクトなど) がFeatureWeightArrayWritableどこかに配置されていないことを確認してください。

于 2012-08-02T23:56:25.410 に答える