2010-10-19 81 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) 
相关问题