繁体   English   中英

使用密封类或任何时的房间字段/吸气剂不匹配警告

[英]Room field / getter mismatch warning when using sealed classes or Any

我有一个 Room ( v2.4.0-beta01 ) 数据库,虽然它工作正常,但在构建期间它会在一些字段上给出字段与吸气剂不匹配的警告,如下所示。

I suspect this is due to an interop issue between Kotlin and Java, since the field definitions in the Kotlin and autogenerated Java don't perfectly match. 虽然Any引起的问题是可以理解的,但我希望密封的 class 对象列表能够顺利工作。

有什么想法可以理想地解决警告,或者至少让 Room 知道这不是问题吗?

PS:Class / 变量名称已更改,以保护隐私和简单。

警告

com.example.Entity's myObjects field has type java.util.List<? extends com.example.MySealedClass> but its getter returns java.util.List<com.example.MySealedClass>. This mismatch might cause unexpected myObjects values in the database when com.example.Entity is inserted into database.
    private java.util.List<? extends com.example.MySealedClass> layoutElements;

com.example.Entity's myMap field has type java.util.Map<java.lang.String, ?> but its getter returns java.util.Map<java.lang.String, java.lang.Object>. This mismatch might cause unexpected myMap values in the database when com.example.Entity is inserted into database.
    private java.util.Map<java.lang.String, ? extends java.lang.Object> myMap;

实体.kt

    @ColumnInfo(name = "myObjects")
    var myObjects: List<MySealedClass> = listOf(),

    @ColumnInfo(name = "myMap")
    @TypeConverters(MyTypeConverter::class)
    var myMap: Map<String, Any>? = null,

Entity.java(房间生成)

    @org.jetbrains.annotations.NotNull()
    @androidx.room.ColumnInfo(name = "myObjects")
    private java.util.List<? extends com.example.MySealedClass> myObjects;

    @org.jetbrains.annotations.Nullable()
    @androidx.room.ColumnInfo(name = "myMap")
    private java.util.Map<java.lang.String, ? extends java.lang.Object> myMap;

我的密封类.kt

    sealed class MySealedClass(val x: Int, val y: Boolean = false) : Serializable {
        data class InnerClass(private val z: Int) : MySealedClass(z), Serializable
        data class InnerClass2(private val zz: Int) : MySealedClass(z), Serializable
    }

我有同样的警告,并通过将 Map 的数据类型从<String, Any>更改为<String, *>来解决它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM