繁体   English   中英

Groovy - 无法在注释中使用静态最终字符串

[英]Groovy - Unable to use static final string in an annotation

有些东西真的很奇怪。 我在注释值中使用静态最终字符串。

class Constants {
    static final String myConstant = "ting tong"   
}

class Service {
    @CacheEvict(cacheNames = Constants.myConstant)
    void doSomethingNice() {    
    }
}

但是,我无法编译它。

这是错误信息

属性“myConstant”的类型应该是“java.lang.String”; 但在@org.springframework.cache.annotation.CacheEvict 中发现类型'java.lang.Object'

预期 'Constants.getMyConstant()' 是 @org.springframework.cache.annotation.CacheEvict 中 java.lang.String 类型的内联常量

可能是什么问题? 这在 Java 中完美运行

一般来说,将常量保存在接口下而不是类下是一个很好的做法。

interface Constants {
    public static final String myConstant = "ting tong"   
}

另一个好的做法是将常量定义为static final而不仅仅是 final,因为为每个常量只创建 1 个实例会更有效。

结果证明问题是由于 Groovy 的自动 getter/setter 生成造成的。 它会为我的常量生成一个 getter 并在注释中使用它,我想这是不允许的。

要修复,请将字段标记为公开。 这将禁用自动吸气剂生成。

class Constants {
    public static final String myConstant = "ting tong"   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM