Android 关于类重写toString的坑

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{显示的内容}这种方式(类名{属性})。

心累…吃一堑长一智!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值