TypeConverter() 在 TypeConverter 错误中具有专用访问权限,而 Android 中的 Room

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

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

在生成的 java 类中,在此行中:

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

但在课堂上是公开的。TypeConverterPointOfInterest


答案 1

不要将关键字更改为(如已接受的答案所建议的那样)。对象声明保证单例模式。objectclass

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

看看官方的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

}

答案 2

我的特殊情况是,我使用Android Studio ctrl + alt + shift + k组合键将我的Java文件转换为Kotlin。Android Studio所做的是,它将我的类转换为类型,我只是无法弄清楚为什么我的代码停止工作。所以,我手动更改为.class TypeConverterobject TypeConverterobject TypeConverterclass TypeConverter

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


推荐