Data-Mediator入门系列3

426 阅读2分钟

学习路径

数据模型各个字段控制是否参加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支持下项目哈。

欢迎大家star, fork,contribute ,提issue. 它会越来越棒。

Thanks for reading !

技术源于分享!