2016-04-05 1 views
0

J'ai plusieurs classes ORM à utiliser avec ORMLite. Tous ont un champ statique (le DAO) et quelques méthodes statiques. Je veux déplacer ces trois à un trait de caractère générique, comme ceci:Impossible de trouver les annotations ORMLite à partir du trait générique

trait ORM<K, V> { 

    private static Dao<K, V> dao = null 

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

Cette approche ne fonctionnera pas, ce qui donne l'erreur suivante

java.lang.IllegalArgumentException: No fields have a DatabaseField annotation in class java.lang.Object 

Cependant, si je change la méthode à une méthode d'instance comme si

trait ORM<K, V> { 

    private static Dao<K, V> dao = null 

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

Cela fonctionne très bien, mais cela n'a pas beaucoup de sens d'être une méthode d'instance.

Une idée sur la façon de le faire fonctionner dans un contexte statique?

Répondre

0

Groovy peut utiliser this dans un contexte statique pour référencer la classe elle-même. Ceci (sans jeu de mots) a résolu le problème.

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