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知识中的一个漏洞
# 1 楼答案
您的方法} ,这是获取
public String toString(Point3D p)
没有覆盖^{Object
的String
表示的标准方法重写它的目的是允许
Object
的任何子类提供对象作为String
的适当表示。Java API在许多情况下使用此方法,主要是在需要将Object
转换为String
时(例如在执行System.out.println(object)
或执行字符串连接时:String s = "The point is " + pointObject;
按照ay89的建议实施:
请注意^{} 注释的用法。如果你在方法中使用它,编译器会警告你它的定义有问题
# 2 楼答案
您可以简单地使用
this
而不是参数p
。因此,将方法更改为public String toString()
,并将函数本身中的p
更改为this
# 3 楼答案
为了清晰起见,我将使用^{} 而不是串联:
使用这种方法,您可以以不需要代码读者进行太多“心理重建”的方式更改输出的外观。例如,如果您决定将输出更改为,例如,
{x=1, y=2, z=3}
,您只需按如下方式重写格式行:# 4 楼答案
你为什么不使用
然后你可以用
System.out.println(point)
# 5 楼答案
您需要重写toString()方法。 Java中的所有对象都有一个toString方法(它是对象类上的一个方法)
默认对象实现只返回该对象的哈希代码(因此,如果不重写它,也会得到它),但如果重写,可以对特定于对象的数据执行更有意义的操作
# 6 楼答案
好的,我自己解决了这个问题——对我来说,发布这个问题证明与Rubber Ducking基本相同
我需要添加另一种方法: