Android Room DB-在查询中使用来自另一个类的静态变量

Android Room DB-在查询中使用来自另一个类的静态变量,android,android-room,android-jetpack,Android,Android Room,Android Jetpack,在DAO类中编写查询时,是否可以使用另一个类(或枚举)中的静态变量?如果可能的话,请告诉我怎么做 我的意思是这样的: public enum MessageState { NOTHING, PENDING, SEND } 在DAO类的查询语句中: @Query("SELECT * FROM message_db WHERE state = :MessageState.PENDING.ordinal()") 在Java中,您可以像连接普通字符串一样连接它: @Query("S

在DAO类中编写查询时,是否可以使用另一个类(或枚举)中的静态变量?如果可能的话,请告诉我怎么做

我的意思是这样的:

public enum MessageState {
   NOTHING,
   PENDING,
   SEND
}
在DAO类的查询语句中:

@Query("SELECT * FROM message_db WHERE state = :MessageState.PENDING.ordinal()")

在Java中,您可以像连接普通字符串一样连接它:

@Query("SELECT * FROM message_db WHERE state = " + MessageState.PENDING.ordinal() + ")"
如果您正在使用Kotlin:

@Query("SELECT * FROM message_db WHERE state = ${MessageState.PENDING.ordinal()}")

将枚举作为默认参数传递给函数:

@Query("SELECT * FROM message_db WHERE state = :state")
fun getMessages(state: Int = MessageState.PENDING.ordinal()): List<Message>
@Query(“从消息中选择*,其中state=:state”)
fun getMessages(state:Int=MessageState.PENDING.ordinal()):列表

这样,您就不需要在每次调用时都提供它,但可以获得相同的结果。

我尝试过这种方法,但它给我的错误是
属性值必须是常量
是否需要
顺序
方法调用?如果你移除它会发生什么?(
MessageState.PENDING
)好的,我想这没关系,但在
注释中似乎不能使用
enum
,它们在编译时不是常量,所以应该使用真正的编译时常量。也许你可以找到一个解决方法,但我不能在这方面给你建议。非常感谢你的回复和提示。你是否尝试过以下方法:
@Query(“SELECT*FROM message_db WHERE state=:msgState”)List getmessageby state(MessageState msgState)
@ankuraurag2实际上我的查询是
@query(“SELECT*FROM message_db WHERE state=1或state=2”)
,这样你就说我必须始终传递两个
MessageState
,这两个值在任何地方都是常量。我认为这不是最好的方法,但非常感谢您的回复这是kotlin的好方法,但我的项目是用java编写的。爪哇有这样的地方吗?对不起,我没注意到。也许在Java中,您可以利用Java8中引入的方法重载和默认接口方法。