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

时间:2018-07-20 09:04:18

标签: java android android-studio kotlin android-room

我已经在项目中集成了 Room 。在这个项目中,有些类在Kotlin中,有些在Java中。使用Android Studio Ctrl + Alt + Shift + K 组合将Java文件转换为Kotlin后,我ve开始遇到此错误:

  

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

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

private final PointOfInterest.TypeConverter __typeConverter_5 = new PointOfInterest.TypeConverter();

但是TypeConverter类中的PointOfInterest是公开的。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

请勿将object关键字更改为classobject declaration保证了Singleton模式。

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

看看官方的Android Architecture Components samples,特别是GithubTypeConverters.kt。另外,this discussion可能很有用。这是我的DateTypeConverter.kt

object DateTypeConverter {

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

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

}