有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中的自定义toString()

我正在学习使用MichaelErnest的《JavaSE7编程要领》一书进行JavaOCA测试。这是我对以下问题的答案之一的代码:

public class Point3D {
    int x, y, z;

    public void setX(int x) {
        this.x = x;
    }

    public int getX() {
        return this.x;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getY() {
        return this.y;
    }

    public void setZ(int z) {
        this.z = z;
    }

    public int getZ() {
        return this.z;
    }

    public String toString(Point3D p) {
        String result = p.getX() + "," + p.getY() + "," + p.getZ();
        return result;
    }

    public static void main(String args[]) {
        Point3D point = new Point3D();
        point.setX(5);
        point.setY(12);
        point.setZ(13);
        System.out.println(point.toString(point));
    }
}

我的代码可以工作,但在最后一行中,我认为我用了一种奇怪的方式编写了代码,难道不应该有一种方法让point.toString()而不是point.toString(point)返回点的字符串表示吗?有人能给我解释一下怎么修吗

我确信这是一个简单的答案,只是试图理解它,因为我怀疑它指向了我java知识中的一个漏洞


共 (6) 个答案

  1. # 1 楼答案

    您的方法public String toString(Point3D p)没有覆盖^{},这是获取ObjectString表示的标准方法

    重写它的目的是允许Object的任何子类提供对象作为String的适当表示。Java API在许多情况下使用此方法,主要是在需要将Object转换为String时(例如在执行System.out.println(object)或执行字符串连接时:

    String s = "The point is " + pointObject;

    按照ay89的建议实施:

    @Override
    public String toString() { 
        String result = getX() + "," + getY() + "," + getZ(); 
        return result;
    } 
    

    请注意^{}注释的用法。如果你在方法中使用它,编译器会警告你它的定义有问题

  2. # 2 楼答案

    您可以简单地使用this而不是参数p。因此,将方法更改为public String toString(),并将函数本身中的p更改为this

  3. # 3 楼答案

    为了清晰起见,我将使用^{}而不是串联:

    public String toString() {
        return String.format("(%d, %d, %d)", x, y, z);      
    }
    

    使用这种方法,您可以以不需要代码读者进行太多“心理重建”的方式更改输出的外观。例如,如果您决定将输出更改为,例如,{x=1, y=2, z=3},您只需按如下方式重写格式行:

    return String.format("{x=%d, y=%d, z=%d}", x, y, z);
    
  4. # 4 楼答案

    你为什么不使用

    public String toString() {
        String result = getX() + "," + getY() + "," + getZ();
        return result;      
    }
    

    然后你可以用System.out.println(point)

  5. # 5 楼答案

    您需要重写toString()方法。 Java中的所有对象都有一个toString方法(它是对象类上的一个方法)

    默认对象实现只返回该对象的哈希代码(因此,如果不重写它,也会得到它),但如果重写,可以对特定于对象的数据执行更有意义的操作

    @Override  
    public String toString() {
       return this.getX() + "," + this.getY() + "," + this.getZ(); 
    }
    
  6. # 6 楼答案

    好的,我自己解决了这个问题——对我来说,发布这个问题证明与Rubber Ducking基本相同

    我需要添加另一种方法:

    public String toString() {
        String result = this.getX() + "," + this.getY() + "," + this.getZ();
        return result;      
    }