【发布时间】:2016-10-29 17:46:17
【问题描述】:
在我的 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 注释处理有关,但我只是不确定如何去做。欢迎提出任何建议。
【问题讨论】:
-
我试图深入研究 Sugar ORM 源(这里是 the most relevant part)并重现您的问题以查看 Sugar ORM 内部发生了什么。但是,令人惊讶的是,
getTableFields在KotlinUser类上调用时只返回login字段。您能否重新检查问题是否真的存在于 Sugar ORM 中持续存在KotlinUser::password?也许条目来自以前的一些运行...... -
好吧,我实际上从头开始创建了一个新项目来重现此行为。对于它的价值,这是source;我还应用了@voddan 的两个解决方案。