我有几个与ORMLite一起使用的ORM类。它们都有一个静态字段(DAO)和一些静态方法。我想将这三个移动到通用特征,如下所示:
trait ORM<K, V> {
private static Dao<K, V> dao = null
@Synchronized
static Dao getDao() {
dao = dao ?: DaoManager.createDao(DatabaseConnection.get(), K)
}
}
这种方法不起作用,给出以下错误
java.lang.IllegalArgumentException: No fields have a DatabaseField annotation in class java.lang.Object
但是,如果我将方法更改为类似的实例方法
trait ORM<K, V> {
private static Dao<K, V> dao = null
@Synchronized
Dao getDao() {
dao = dao ?: DaoManager.createDao(DatabaseConnection.get(), this.getClass())
}
}
它工作正常,但它作为实例方法没有多大意义。
有关如何使其在静态环境中工作的任何想法吗?
答案 0 :(得分:0)
Groovy可以在静态上下文中使用this
来引用类本身。这(没有双关语)解决了这个问题。
@Synchronized
static Dao getDao() {
dao = dao ?: DaoManager.createDao(DatabaseConnection.get(), this)
}