您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

Android Studio代码检查Bug

时间:02-10来源:作者:点击数:

今天,想使用Timber来打印日志,却发现一句常用的代码出了问题。

首先,我们添加依赖:

implementation 'com.jakewharton.timber:timber:5.0.1'

然后初始化Timber

Timber.plant(new Timber.DebugTree());

就这么一句简单的java初始化代码,Android Studio却提示我报错。如下:

在这里插入图片描述

plant方法需要的参数是一个Tree,我们传入的是一个DebugTree,而DebugTree继承自Tree,为什么不行啊,于是我就用Tree变量来接收DebugTree实例,如下:

在这里插入图片描述

真是见鬼了,父类引用不能保存子类引用了,难道他们不是父类和子类的关系吗?于是写了下面的实验代码:

Log.i("ABCD", Timber.Tree.class.getName());
Log.i("ABCD", Timber.DebugTree.class.getSuperclass().getName());

运行结果如下:

timber.log.Timber$Tree
timber.log.Timber$Tree

这说明他们就是父类子类的关系啊,于是我再写下下面的代码来证明一下:

在这里插入图片描述

提示我这两个class不能使用==进行比较,真是活久见!然后我使用快捷键Ctrl + Alt + V把这两个class先提取为局部变量,以便看看其类型,如下:

在这里插入图片描述

这样看起来泛型中的类型确实不一样,那我有办法,我改为一样的类型,都使用问号通配符,如下:

在这里插入图片描述

这样就可以使用==进行比较了,打印结果如下:

isSame = true

这充分说明TreeDebugTree是父子关系。于是我就想,那这个报错是IDE的问题,是不是不影响运行呢,于是不管他报错了,直接调用打印log的代码运行看看,如下:

在这里插入图片描述

运行一切正常,log正常输出,哎,真是恶了个心,我还以为是哪里不对呢!如果对于强迫证不喜欢看到红线报错,则可以使用反射解决,如下:

在这里插入图片描述

这样就没有红线了,哎,心累!

考虑到Timber的新版本是修改为kotlin语言了,于是猜想会不会是这个问题导致的?于是创建一个kotlin语言的android项目,再写同样的代码,发现就不报错了,如下:

在这里插入图片描述

真是奇了个怪!

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门