使用 Room 和 RxJava3,我的 DAO 介面總是有具有不同回傳型別(Maybe 和 Flowable)但具有完全相同的查詢的方法。這就是我解決一個重要問題的方法,即每當我使用 Flowables 時,我希望在表為空時立即發出一個空串列(而不是什么都沒有)。
如果我馬虎而忘記更新所有查詢字串,則復制查詢字串可能會引入錯誤。現在我發現在存盤查詢時仍然可以在 Android Studio 中獲得語法高亮顯示,我想出了以下方法。
String query = "SELECT * FROM MyObject"; // public, as DAO is a public java interface
@Query(query)
Maybe<List<MyObject>> maybeMyObjectList();
@Query(query)
Flowable<List<MyObject>> flowableMyObjectList();
這使我能夠做類似的事情flowableMyObjectList().startWith(maybeMyObjectList().defaultIfEmpty(Collections.emptyList())).distinctUntilChanged()
盡管如此,從安全角度來看,將 SQL 查詢存盤在公共字串中感覺還是個壞主意。另一方面,我不認為我的應用程式包中的資料庫模式應該是秘密的。任何比我知識更豐富的人都可以確認這聽起來很糟糕,或者更好地提出解決方法嗎?
uj5u.com熱心網友回復:
您可以使用抽象類代替介面,因此您可以擁有帶有主體和私有變數的方法。
然后,您必須使方法抽象。
所以你可以: -
@Dao
abstract class TheDao {
private static final String query = "SELECT * FROM MyObject";
@Query(query)
abstract Maybe<List<MyObject>> maybeMyObjectList();
@Query(query)
abstract Flowable<List<MyObject>> flowableMyObjectList();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521171.html
