通用方法——建议始终覆盖toString

Java的Object类中的默认toString方法返回的是类名和内存地址,但在实际开发中,为了便于日志记录和调试,通常需要重写toString方法,提供更有意义的信息,如对象的属性值。例如,对于Point类,重写toString为包含x和y坐标的形式。阿里巴巴开发规约也建议这样做,但应避免依赖toString进行数据交换,而应使用如JSON等标准格式。
摘要由CSDN通过智能技术生成

java 在 Object 类中提供了默认的 toString 方法,此方法的结果是根据对象的hasCode转换十进制字符串

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

但是这个方法非常不友好,默认给出的信息几乎没有什么意义。 比如

public class Point {
	private final int x, y;
    
	public Point(int x, int y) {
	    this.x = x;
	    this.y = y;
	}
}
public class Demo {
    public static void main(String[] args) {
        Point point = new Point(1,2);
        System.out.println(point.toString());
    }
}
com.sc.Point@74a14482

我们只能看出这是一个 com.sc.Point 对象,其他的一无所知,后面的是它的内存地址,但对于程序员来说,知道这一个内存地址也没有用,实际开发时,我们会记录 log ,这时候如果要记录对象信息,logger 就会调用 对象的 toString 方法,所以,覆盖 toString ,改为友好的格式,有助于 log 记录时,能记录下更详细更清晰有助于 debug 的日志信息

public String toString() {
		return "Point(x=" + this.x + ", y=" + this.y + ")";
	}

那么,再执行上面的代码 得到的就是 Point(x=1, y=2)

这样的信息在执行 log.info log.debug log.error 等时候,也能得到友好的信息。

注意: toString 之后的格式是给程序员看的,尽量不要依赖这个toString 后的格式去做数据交换,如果需要交互数据,可以考虑 json 等正规的交互格式,而不是 String 字符串


关于toString方法,阿里巴巴开发规约里面也专门做了要求:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值