我在Kotlin里有这样一个函数
fun getJooqOperator(field: TableField<*,*>, value: String): org.jooq.Condition {
// In this case, "this" is the operator enum.
// The combination of field and operator is strictly handled in the front-end (Elm)
return when (this) {
EQ -> (field as TableField<*, String>).eq(value)
NEQ -> (field as TableField<*, String>).ne(value)
GT -> (field as TableField<*, Int>).gt(Integer.parseInt(value))
}
}
这一部分用在Kotlin类中,该类将从前端反序列化一些JSON。从这个JSON,该类将基于用户的输入构建一个jOOQ-query。这一部分是关于使用正确的运算符和相应的列和输入值。
然而这不会导致编译错误,IntelliJ抱怨field
的强制转换。我确信这些字段可以安全地强制转换为特定的操作符枚举。这是IntelliJ抛出的警告:
我不想使用Change type arguments to <*, *>
,因为如果不进行强制转换,jOOQ条件将无法处理这些值。
有没有办法重写我的函数,或者我可以安全地忽略这些警告?
1条答案
按热度按时间vuktfyat1#
铸造
[...]还是可以安全地忽略这些警告?
我不确定你在这里期望什么样的安全性。你的假设
EQ
和NEQ
是基于String
的,而GT
是基于Int
的,这是相当强的。你可能有你的原因。如果你这样编码,并且知道为什么,那么是的,你可以安全地忽略这些警告。这并不意味着这样的类型转换是“安全的”* 一般来说 *,它们不是。*
可以转换为任何 * 未知 * 类型,但是在你的类型转换中,你做了一个有效的假设,该类型应该是已知的,只是不可能在类型系统中表达它。胁迫
You can always use data type coercion as well,例如
不过,与不安全的强制类型转换不同,这确实会对您正在构建的表达式树产生影响。在您的情况下,可能不是一个重要的影响。