Java无法访问Runtime Annotations

时间:2015-06-22 13:11:20

标签: java annotations

我的自制注释遇到了问题。

我有一个注释

SET @DATE_RELEASE_START = '2015-01-01';
SET @DATE_RELEASE_END = '2015-05-31'

    SELECT @statement = ' SELECT * 
                          FROM (SELECT AFCDENTE, M.ID_MODIFICATION_CODE, COUNT(*) AS Conteggio--, CAST((COUNT(*)  * 100/ 15032) AS decimal(10,7)) AS Percentage
                                FROM CIC_LOG_MODIFICHE AS L INNER JOIN ADM_MODIFICATION_CODE AS M ON L.CD_MODIFICATION_CODE = M.CD_MODIFICATION_CODE
                                                            INNER JOIN CIC_PRODUZIONE AS P ON P.CD_CIC_PRODUZIONE = L.CD_CIC_PRODUZIONE
                                WHERE AFDTMODI BETWEEN '+@DATE_RELEASE_START+' AND '+@DATE_RELEASE_END+' AND P.CD_PLANT = '+@CD_PLANT+' AND AFCDENTE IS NOT NULL
                                GROUP BY AFCDENTE, M.ID_MODIFICATION_CODE) as tbl 
                        PIVOT (SUM(tbl.Conteggio) for tbl.ID_MODIFICATION_CODE in (' + @columns + ')) as pvt'

一个班级

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Persistence {
    String value();
}

我尝试使用在TestOnes超类中声明的方法访问标记为@Persistence的所有字段:

public class TestOne extends PersistentObjectParent {    
@Persistence("someField") String foo = "bar";}

我在这里读到的Java应该保留我的Annotation,因为它标记为Runtime。但是这些字段在运行时没有产生注释,我的代码总是落入if块。

有人可以指出我哪里出错吗?

谢谢

PS:上面的for循环被调用如下:

for(Field f : this.getClass.getDeclaredFields()){
    if(!f.isAnnotationPresent(Persistence.class)){
        continue;
    }
    //do something with f
}

1 个答案:

答案 0 :(得分:0)

我给我带来了耻辱。

一切正常。我在单元测试中做了一个错误的假设并且因为注释没有在调试模式下显示而变得困惑。

谢谢大家的帮助和时间