return this.name;
}
public final void setName(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, “<set-?>”);
this.name = var1;
}
public final int getAge() {
return this.age;
}
public final void setAge(int var1) {
this.age = var1;
}
public Person(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, “name”);
super();
this.name = name;
this.age = age;
}
// 省略了一些方法。
}
可以看到Person有一个包含两参的构造方法,并且这个构造方法中有name的空安全检查。
也就是说,正常通过这个构造方法构建一个Person对象,是不会出现空安全问题的。
那么只能去看看Gson的源码了:
Gson的逻辑,一般都是根据读取到的类型,然后找对应的TypeAdapter去处理,本例为Person对象,所以会最终走到ReflectiveTypeAdapterFactory.create
然后返回一个TypeAdapter。
我们看一眼其内部代码:
ReflectiveTypeAdapterFactory.create
@Override
public TypeAdapter create(Gson gson, final TypeToken type) {
Class<? super T> raw = type.getRawType();
if (!Object.class.isAssignableFrom(raw)) {
return null; // it’s a primitive!
}
ObjectConstructor constructor = constructorConstructor.get(type);
return new Adapter(constructor, getBoundFields(gson, type, raw));
}
重点看constructor这个对象的赋值,它一眼就知道跟构造对象相关。
ConstructorConstructor.get
public ObjectConstructor get(TypeToken typeToken) {
final Type type = typeToken.getType()