学习路径
- 1, 入门篇
- 2, 专题篇
- 3, 源码阅读
数据模型各个字段控制是否参加toString, equals, hasCode, Parcelable, serializable
下面这段代码用flags标记,分别实现了某些字段不参加equals, parcelable, toString
//下面表示: age不参加equals方法, name不参加parcelable, id不参加toString
@Fields(value = {
@Field(propName = "age" , type = int.class, flags = FLAGS_MAIN_SCOPES_3 &~ FLAG_EQUALS),
@Field(propName = "name" , type = String.class, flags = FLAGS_MAIN_SCOPES_3 &~ FLAG_PARCELABLE),
@Field(propName = "id" , type = long.class, flags = FLAGS_MAIN_SCOPES_3 &~ FLAG_TO_STRING),
},generateJsonAdapter = false)
public interface Student
ps:类似的还有很多标志。都在类com.heaven7.java.data.mediator.FieldFlags中.
数据模型的继承和依赖
- 1, 继承模型。(注意这里虽然是接口,但是只允许继承一个数据模型。否则编译错误) 假设我有一个ViewBind类继承自之前的Student. 那么模型定义类似下面。
@Fields(value = {
@Field(propName = "enable" , type = boolean.class),
}, generateJsonAdapter = false)
public interface ViewBind extends Student{
}
- 2, 依赖模型
同样是上面这个module。 直接增加一个student属性。那么模型定义类似下面.
@Fields(value = {
@Field(propName = "enable" , type = boolean.class),
@Field(propName = "student" , type = Student.class),
}, generateJsonAdapter = false)
public interface ViewBind {}
Gson注解是生成
- 最开始的时候想到的就是和gson搭配。请看下面一个数据模型定义。
@Fields({
@Field(propName = "name", seriaName = "heaven7", type = String.class, flags = FLAGS_NO_EXPOSE),
})
public interface StudentBind extends IDataMediator, ISelectable{
}
propName = "name" 表示属性的名称 是 name , 会影响生成的get/set方法名称
type = String.class 表示属性类型是String类型
下面是2个与gson相关的属性:
seriaName = "heaven7" 表示了要生成gson注解的
@SerializedName("heaven7")
flags = FLAGS_NO_EXPOSE 表示了要生成gson注解的
@Expose(
serialize = false,
deserialize = false
)
生成结果
@SerializedName("heaven7")
@Expose(
serialize = false,
deserialize = false
)
private String name;
ps: 其他的@since, @until类似。
想要体验最新的特性 ?
请到github/data-mediator体验。 如果觉得不错,请star支持下项目哈。