TypeConverter() 在 Android 中的 TypeConverter 错误中具有私有访问权限
TypeConverter() has private access in TypeConverter error with Room in Android
我已经在我的项目中集成了 Room。在这个项目中,一些 classes 在 Kotlin 中,一些在 Java 中。在我使用 Android Studio Ctrl+Alt+Shift[ 将 Java 文件转换为 Kotlin 后=27=]+K组合,我开始遇到这个错误:
TypeConverter() has private access in TypeConverter
在生成的javaclass中,在这一行:
private final PointOfInterest.TypeConverter __typeConverter_5 = new PointOfInterest.TypeConverter();
但是 PointOfInterest
class 中的 TypeConverter
是 public。
在我的特殊情况下,我使用 android studio ctrl+alt+shift+k 组合键将我的 Java 文件转换为 Kotlin。 android studio 所做的是,它将我的 class TypeConverter
classes 转换为 object TypeConverter
的类型,我只是想不通为什么我的代码停止工作。因此,我手动将 object TypeConverter
更改为 class TypeConverter
。
关于转换为 Kotlin 的更多要点: 在 Parcelable class 的情况下,android studio 中的 kotlin 转换文件不会添加 @JvmField创建者字段。因此,您必须手动添加它 @JvmField val CREATOR
以确保 Parcelable classes.
正常工作
Don't change the object
keyword to class
(as the accepted answer suggests). The object declaration guarantees the Singleton pattern.
TypeConverter
java 文件自动转换为 kotlin 文件后,您应该用 @JvmStatic
标记所有内部转换器函数,以便 Room 可以将它们用作常规静态函数。
看看官方Android Architecture Components samples, specifically the GithubTypeConverters.kt. Also, this discussion会有用的。这是我的 DateTypeConverter.kt
:
object DateTypeConverter {
@TypeConverter
@JvmStatic
fun toDate(timestamp: Long?) = timestamp?.let { Date(timestamp) }
@TypeConverter
@JvmStatic
fun toTimestamp(date: Date?) = date?.time
}
我已经在我的项目中集成了 Room。在这个项目中,一些 classes 在 Kotlin 中,一些在 Java 中。在我使用 Android Studio Ctrl+Alt+Shift[ 将 Java 文件转换为 Kotlin 后=27=]+K组合,我开始遇到这个错误:
TypeConverter() has private access in TypeConverter
在生成的javaclass中,在这一行:
private final PointOfInterest.TypeConverter __typeConverter_5 = new PointOfInterest.TypeConverter();
但是 PointOfInterest
class 中的 TypeConverter
是 public。
在我的特殊情况下,我使用 android studio ctrl+alt+shift+k 组合键将我的 Java 文件转换为 Kotlin。 android studio 所做的是,它将我的 class TypeConverter
classes 转换为 object TypeConverter
的类型,我只是想不通为什么我的代码停止工作。因此,我手动将 object TypeConverter
更改为 class TypeConverter
。
关于转换为 Kotlin 的更多要点: 在 Parcelable class 的情况下,android studio 中的 kotlin 转换文件不会添加 @JvmField创建者字段。因此,您必须手动添加它 @JvmField val CREATOR
以确保 Parcelable classes.
Don't change the
object
keyword toclass
(as the accepted answer suggests). The object declaration guarantees the Singleton pattern.
TypeConverter
java 文件自动转换为 kotlin 文件后,您应该用 @JvmStatic
标记所有内部转换器函数,以便 Room 可以将它们用作常规静态函数。
看看官方Android Architecture Components samples, specifically the GithubTypeConverters.kt. Also, this discussion会有用的。这是我的 DateTypeConverter.kt
:
object DateTypeConverter {
@TypeConverter
@JvmStatic
fun toDate(timestamp: Long?) = timestamp?.let { Date(timestamp) }
@TypeConverter
@JvmStatic
fun toTimestamp(date: Date?) = date?.time
}