Java 作用域构造不能用类型使用进行注释

标签 java annotations java-8 checker-framework

我想用 @Nullable 注释(来自 Java Checker Framework)来注释一个完全限定的类名,例如:

class Demo {
    private transient @Nullable org.apache.lucene.search.Query cached_results;

    // ...
}

但是这会导致错误:

scoping construct cannot be annotated with type-use annotation: @checkers.nullness.quals.Nullable

如何注释完全限定的类名?

最佳答案

Java language specification (draft for version 8) §8.3 将“UnannClassType”指定为

UnannClassType:
Identifier [TypeArguments]
UnannClassOrInterfaceType . {Annotation} Identifier [TypeArguments]

因此,您需要声明:

private transient org.apache.lucene.search.@Nullable Query cached_results;

或者在检查器框架的增强 java 7 编译器中:

private transient org.apache.lucene.search./*@Nullable*/ Query cached_results;

注意:普通 Java 编译器会忽略 /*@Nullable*/

关于Java 作用域构造不能用类型使用进行注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21385938/

相关文章:

java - eclipse 黄点符号

java - 测试 Quartz CronTrigger 触发器

java - 如何将 JSON 字段名称映射到不同的对象字段名称?

java - 如何为 java 注释处理器编写自动化单元测试?

筛选列表值的仅一个单个值的列表

java - Apache POI "smart drag copy"单元格

java - Prepared Statements 额外引号

java - 为什么 Spring @Value 与 @Controller 不兼容?

java - 为什么实例方法引用适用于不匹配的签名?

java - 为什么以下带有方法引用的强制转换不会产生编译错误?