首页 文章

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

提问于
浏览
1

我在我的项目中集成了Room . 在这个项目中,一些类在Kotlin中,一些在Java中 . 在使用Android Studio Ctrl Alt Shift K组合将我的Java文件转换为Kotlin后,我开始面临此错误:

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

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

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

PointOfInterest 中的 TypeConverter 是公开的 .

2 回答

  • 2

    我的特殊情况,我使用android studio ctrl alt shift k组合将我的Java文件转换为Kotlin . android工作室做了什么,它将我的 class TypeConverter 类转换为 object TypeConverter 类型,我只是想不通为什么我的代码停止工作 . 所以,我手动将 object TypeConverter 更改为 class TypeConverter .

    关于转换为Kotlin还有一点:在Parcelable类的情况下,在android studio中kotlin转换文件并不需要手动添加 @JvmField val CREATOR 以确保Parcelable类正常工作 .

  • 1

    请勿将 object 关键字更改为 class . object 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
    
    }
    

相关问题