Android 关于类重写toString的坑

本文探讨了在Android开发中,因重写toString方法而导致的音乐对象被误判为null的问题。通过分析,揭示了当对象的一个关键属性为null时,重写的toString方法会返回null,从而误导了日志输出,使开发者误认为整个对象为空。文章强调了正确重写toString方法的重要性,建议采用包含类名和多个属性的格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 关于类重写toString的坑

背景:厂商反馈通过外调sdk播放器回调获取到的void onPlayMusic(Music music)中的music对象为null。

得知这个问题之后添加了log通过demo测试,发现客户端和服务端都可以获取到music中的属性。无法复现此问题。继续跟厂商沟通对方使用如下方式显示log。
Log.d(“TAG”, " — mPlayStateListener — onPlayMusic = " + music);
抓取log输出结果:
KaoLaManager: — mPlayStateListener — onPlayMusic = null
通过分析代码流程服务端传过去的确实是一个不为null的对象。那为什么客户端接受显示为null。

解决:最后在Music类中发现有人重写了toString的方法
//重写了toString方法,并且只显示其中一个重要属性
 public String toString() {
        return this.audioName;
    }

由于这个属性存在null的情况,打印log的时候直接使用music,默认调用了toString的方法。获取到的这个属性刚好是null,导致让别人误以为music对象是null的情况。

总结:这么写toString的直接祭天吧!

一般重写的方式:

@Override
    public String toString() {
        return "Music{" +
                "audioName=" + audioName +
                ", audioId='" + audioId + '\'' +
                '}';
    }

哪怕你只用其中一个属性,也要用Music{显示的内容}这种方式(类名{属性})。

心累…吃一堑长一智!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值