【问题标题】:toString from another java project prints type name来自另一个 java 项目的 toString 打印类型名称
【发布时间】:2012-08-02 23:08:24
【问题描述】:

所以我知道关于覆盖“toString”以查看您想要的内容而不是类型的事情,但就我而言,总体情况是:

Project1:ClassA 使用Project2:ClassB,其中我将Project2 包含到Project1 类路径中并且编译工作正常。但是,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());

【问题讨论】:

  • 调用toString()的代码在哪里?
  • edu.cs.FeatureWeight@32829 看起来与 toString() 的默认实现完全一样。考虑到它打印 edu.cs.FeatureWeight 而不是 edu.cs.FeatureWeightArrayWritable@?????我会说你没有在正确的对象上调用它。您是否在某处使用(转换为) FeatureWeight 类?你得到的实际输出是什么?它的代码是什么?
  • 您确定打印的内容正确吗?
  • 感谢您的提问,我希望我的澄清现在已经足够了 :)
  • 从您的文章中,我们是否假设value 是问题所在,而key 打印正常?

标签: java project tostring


【解决方案1】:

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

【讨论】:

  • 谢谢大家,Richard 似乎是对的,因为当我在 eClipse 中“提取 Runnable Jar”时它工作正常,但上述错误是在使用 ant 和我定义的 build.xml 时出现的。我仍然没有找到我的 build.xml 中的另一个副本在哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
相关资源
最近更新 更多