2010-10-19 88 views
0

我已經寫了一個庫,在這個庫中我對Java字段進行了一些自檢以獲得它們的註釋列表(更具體地說,看看它們是否有一個或多個特定的註釋(例如 - @Id,@Child,)。那種代碼的一個例子,我用:Groovy的AnnotationNode和Java的註釋之間有什麼區別?

@Override 
    public <T extends Annotation> T getAnnotation(Class<T> annotationClass) { 
     return mapped.getAnnotation(annotationClass); 
    } 

mapped是一個Java Field(並因此具有getAnnotation(Annotation)方法)我想將這個方法對於Groovy

我的一切。已經理解使用Groovy,我必須用0123代替我的Fields(或bean屬性)。然而,考慮到使用這些註釋,我面臨一個問題,因爲groovy似乎與Java處理的方式截然不同。

那麼,是否可以考慮從Java註釋到Groovy AnnotationNode的遷移路徑,還是必須創建一個對這些概念的抽象?

回答

0

我不確定AnnotationNode。基於它的包裝,我認爲它必須與AST Transformations

在任何情況下,您的代碼都應該在Groovy中與Java相同。我在Groovy中使用JPA,並通過Java反射訪問了註釋。如果您遇到特定問題,請提供更多詳細信息。

你似乎對「字段」與「metaProperties」感到困惑。您不要將您的字段更改爲metaProperties。你的領域變成metaProperties。換句話說,默認情況下,Groovy類中的字段是bean屬性(您可以免費獲得getter/setter)。您可以使用Groovy動態訪問屬性,但它們仍然是字節碼中的Field。

下面是一個小Groovy腳本,演示訪問bean屬性並獲取它的註釋。

import java.lang.reflect.* 

class Person { 

    @Deprecated 
    String name 

} 

def me = new Person(name:'dave') 

assert me.name == 'dave' 
assert me.'name' == 'dave' 
assert me.getName() == 'dave' 

assert Person.class.getDeclaredField('name') instanceof Field 
assert Person.class.getDeclaredField('name').getAnnotations() 
assert Person.class.getDeclaredField('name').getAnnotation(Deprecated.class) 
相關問題