如何在没有覆盖的情况下打印我的Java对象而没有“@ 677327b6”?

时间:2016-12-02 10:38:33

标签: java override tostring hashcode

我定义了这个方法:

    @Override
    public String toString(String line)
    {
        String[] categories = line.split("; ");
        String[] info;

        // Get the suspect's information
        info = categories[0].split(", ");
        suspect = new Person(info[0].charAt(0), Integer.parseInt(info[1]), Double.parseDouble(info[2]));
        String str = "";
        if (info[0].charAt(0) == 'M')
            str += "Male, ";
        else if (info[0].charAt(0) == 'F')
            str += "Female, ";
        else
            str += "unknown, ";
        str += Integer.parseInt(info[1]) + "'s, ";
        str += Double.parseDouble(info[2]) +"m";
        System.out.println(str);
        return str;
    }
}

当我在添加@Override之前通过命令行运行此操作时,我在终端中获得类似于此的输出:Detective@677327b6

我知道这是正在输出的哈希码。 但是,我需要它来打印str,就像我在toString()方法中定义的那样。

问题是,Detective类型的toString(String)方法必须覆盖或实现超类型方法,我唯一的解决方案是删除@Override注释。

那么我可以通过其他方式访问正确的值而不是覆盖它们?

1 个答案:

答案 0 :(得分:1)

这不是通常在Object类中声明的toString方法吗?

@Override
public String toString(String line)

对象上的那个不带任何参数......

@Override
public String toString() { ... }

line来自哪里?

如果您将line存储在(Detective?)类中,那么您可以使用正确的toString签名。

希望这有帮助。