无法从通用特征中找到 ORMLite 注释

Cannot find ORMLite annotations from generic Trait

我有几个 ORM 类 可以与 ORMLite 一起使用。它们都有一个静态字段(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())
    }
}

它工作正常,但作为实例方法没有多大意义。

知道如何让它在静态环境中工作吗?

Groovy 可以在静态上下文中使用 this 来引用 class 本身。这(没有双关语意)解决了问题。

@Synchronized
static Dao getDao() {
    dao = dao ?:  DaoManager.createDao(DatabaseConnection.get(), this)
}