Kotlin:@Ignore' 由 Sugar ORM 保留的属性
Kotlin: @Ignore'd properties persisted by Sugar ORM
在我的 Android 应用程序中,我将 Kotlin 与 SugarORM 结合使用,但我遇到了一个问题,试图阻止某些属性被持久化。具有讽刺意味的是,@com.orm.dsl.Ignore
注释在 Kotlin 类.
中使用时似乎被忽略了
例如,
1) 让我们声明两个看似相同的模型:
// JavaUser.java
public class JavaUser extends SugarRecord {
public String login = "login";
@Ignore public String password = "password";
}
// KotlinUser.kt
class KotlinUser : SugarRecord() {
var login: String = "login"
@Ignore var password: String = "password"
}
2) 保留他们的实例
JavaUser().save()
KotlinUser().save()
3) 并查看实际保留的内容:
sqlite> select * from java_user;
ID|LOGIN
1|login
sqlite> select * from kotlin_user;
ID|LOGIN|PASSWORD
1|login|password
我意识到它可能与 Kotlin 注释处理有关,但我不确定如何处理它。欢迎提出任何建议。
您的 Java 和 Kotlin 代码之间的核心区别在于,在 Java 中您使用字段,而在 Kotlin 中您使用属性。请参阅文档中的 Properties and Fields 部分。
您可以尝试以下解决方案,看看哪种解决方案最适合 SugarORM:
1。让 Kotlin 公开字段:
@Ignore @JvmField var password: String = "password"
2。将您的注释应用于私有支持字段:
@field:Ignore var password: String = "password"
在我的 Android 应用程序中,我将 Kotlin 与 SugarORM 结合使用,但我遇到了一个问题,试图阻止某些属性被持久化。具有讽刺意味的是,@com.orm.dsl.Ignore
注释在 Kotlin 类.
例如,
1) 让我们声明两个看似相同的模型:
// JavaUser.java
public class JavaUser extends SugarRecord {
public String login = "login";
@Ignore public String password = "password";
}
// KotlinUser.kt
class KotlinUser : SugarRecord() {
var login: String = "login"
@Ignore var password: String = "password"
}
2) 保留他们的实例
JavaUser().save()
KotlinUser().save()
3) 并查看实际保留的内容:
sqlite> select * from java_user;
ID|LOGIN
1|login
sqlite> select * from kotlin_user;
ID|LOGIN|PASSWORD
1|login|password
我意识到它可能与 Kotlin 注释处理有关,但我不确定如何处理它。欢迎提出任何建议。
您的 Java 和 Kotlin 代码之间的核心区别在于,在 Java 中您使用字段,而在 Kotlin 中您使用属性。请参阅文档中的 Properties and Fields 部分。
您可以尝试以下解决方案,看看哪种解决方案最适合 SugarORM:
1。让 Kotlin 公开字段:
@Ignore @JvmField var password: String = "password"
2。将您的注释应用于私有支持字段:
@field:Ignore var password: String = "password"