Data-Mediator入門系列3

LightSun發表於2017-12-07

學習路徑

資料模型各個欄位控制是否參加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 !

技術源於分享!

相關文章