发现了一个极度不安全的操作
|
在People类的构造方法中打印日志。 我们都清楚,正常情况下,一般构造子类对象,必然会先执行父类的构造方法。 运行一下: 没有执行父类构造方法,但对象构造出来了这里可以猜到, Person对象的构建,并不是常规的构建对象,没有走构造方法。 那么它是怎么做到的呢?只能去Gson的源码中去找答案了。 找到其怎么做的,其实就相当于解答了我们文首的问题。 3. 追查原因Gson这样构造出一个对象,但是没有走父类构造这种,如果真是的这样,那么是极其危险的。 会让程序完全不符合运行预期,少了一些必要逻辑。 所以我们提前说一下,大家不用太惊慌,并不是Gson很容易出现这样的情况,而是恰好上例的写法碰上了,我们一会会说清楚。
首先我们把Person这个kotlin的类,转成Java,避免背后藏了一些东西: 可以看到Person有一个包含两参的构造方法,并且这个构造方法中有name的空安全检查。 也就是说,正常通过这个构造方法构建一个Person对象,是不会出现空安全问题的。 那么只能去看看Gson的源码了: Gson的逻辑,一般都是根据读取到的类型,然后找对应的TypeAdapter去处理,本例为Person对象,所以会最终走到`ReflectiveTypeAdapterFactory.create`然后返回一个TypeAdapter。
我们看一眼其内部代码: (编辑:怀化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

