2016-04-05 2 views
0

ORMLiteで使用するいくつかのORMクラスがあります。それらのすべてに1つの静的フィールド(DAO)と2つの静的メソッドがあります。私はインスタンスメソッドにメソッドを変更した場合ORMLiteアノテーションが一般的なTraitから見つかりません

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

Groovyは、静的コンテキストでthisを使用して、クラス自体を参照できます。これは、(意図された馬小屋)問題を解決しました。

@Synchronized 
static Dao getDao() { 
    dao = dao ?: DaoManager.createDao(DatabaseConnection.get(), this) 
} 
関連する問題