如何在我的Realm迁移代码中指定一个盒装字段可以为空?

我正在使用Kotlin ,我想向RealmObject添加一个新字段,该字段可以为空。 以下是我在迁移中的情况:

 val schema = realm.schema.get(ZOLA_NOTIFICATION) if (!(schema?.hasField("agentId") ?: false)) { schema.addField("agentId", Long::class.java) } 

但是,运行此迁移时收到错误消息:

 Non-fatal Exception: io.realm.exceptions.RealmMigrationNeededException Field 'agentId' does not support null values in the existing Realm file. Either set @Required, use the primitive type for field 'agentId' or migrate using RealmObjectSchema.setNullable(). 

我如何指定Long::class.java应该是迁移代码中的可空类型?

不幸,

 Long::class.java // kotlin 

相当于

 long.class // java Long::class.javaPrimitiveType // kotlin 

但是,你需要添加的可空Long in Realm是

 Long.class // java 

所以你需要使用

 Long::class.javaObjectType // Long.class 

在迁移中,您可以使用RealmObjectSchema.setNullable(String field, boolean nullable)方法将必填字段转为可空字段。