TypeConverter()具有TypeConverter错误中的私有访问权限,Android中存在Room

Rah*_*ogi 3 java android kotlin android-studio android-room

我已将Room集成到我的项目中。在这个项目中,有些类在Kotlin中,有些在Java中。我使用Android Studio中转换我的Java文件后,科特林Ctrl+ Alt+ Shift+ K的组合,我已经开始面临这个错误:

TypeConverter()在TypeConverter中具有私有访问权限

在生成的java类中,在这一行:

private final PointOfInterest.TypeConverter __typeConverter_5 = new PointOfInterest.TypeConverter();
Run Code Online (Sandbox Code Playgroud)

但是TypeConverterPointOfInterest课堂上是公开的。

Rah*_*ogi 15

在我的特殊情况下,我使用android studio ctrl + alt + shift + k组合键将Java文件转换为Kotlin。android studio所做的就是,它将我的class TypeConverter类转换为type,object TypeConverter而我只是想不出为什么我的代码停止工作。因此,我手动更改object TypeConverterclass TypeConverter

关于转换为Kotlin的另一点:如果是Parcelable类,则在android studio中转换为Kotlin的文件不会在CREATOR字段上添加@JvmField。因此,您必须@JvmField val CREATOR手动添加它以确保Parcelable类正常工作。


Nic*_*lau 7

请勿将object关键字更改为class。该对象的声明,保证Singleton模式。

在将TypeConverterJava文件自动转换为kotlin文件后,您应该用标记所有内部转换器函数,@JvmStatic以便Room可以将它们用作常规静态函数。

看一下官方的Android Architecture Components示例,特别是GithubTypeConverters.kt。同样,该讨论可能是有用的。这是我的DateTypeConverter.kt

object DateTypeConverter {

    @TypeConverter
    @JvmStatic
    fun toDate(timestamp: Long?) = timestamp?.let { Date(timestamp) }

    @TypeConverter
    @JvmStatic
    fun toTimestamp(date: Date?) = date?.time

}
Run Code Online (Sandbox Code Playgroud)

  • `@JvmStatic` 是必不可少的部分(这是有道理的)。谢谢 (6认同)