我已经在项目中集成了 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
是公开的。
答案 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
关键字更改为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
}