學習路徑
- 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支援下專案哈。