TypeConverter() 在 Android 中的 Room 出现 TypeConverter 错误时具有私有访问权限
Posted
技术标签:
【中文标题】TypeConverter() 在 Android 中的 Room 出现 TypeConverter 错误时具有私有访问权限【英文标题】:TypeConverter() has private access in TypeConverter error with Room in Android 【发布时间】:2018-12-28 13:15:30 【问题描述】:我已经在我的项目中集成了 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
是公开的。
【问题讨论】:
你能用TypeConverter
添加你的PointOfInterest
类吗?
【参考方案1】:
不要将
object
关键字更改为class
(正如公认的答案所暗示的那样)。 object declaration 保证单例模式。
在将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
【讨论】:
@JvmStatic
是必不可少的部分(这是有道理的)。谢谢【参考方案2】:
在我的特殊情况下,我使用 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 类正常工作。
【讨论】:
以上是关于TypeConverter() 在 Android 中的 Room 出现 TypeConverter 错误时具有私有访问权限的主要内容,如果未能解决你的问题,请参考以下文章