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

Kas*_*erg 9 java annotations java-8 checker-framework

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

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是这会导致错误:

scoping construct cannot be annotated with type-use annotation: @checkers.nullness.quals.Nullable
Run Code Online (Sandbox Code Playgroud)

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

Kas*_*erg 14

Java语言规范(草案第8版) §8.3指定一个"UnannClassType"为

UnannClassType:
Identifier [TypeArguments]
UnannClassOrInterfaceType.{Annotation}标识符[TypeArguments]

因此,您需要声明:

private transient org.apache.lucene.search.@Nullable Query cached_results;
Run Code Online (Sandbox Code Playgroud)

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

private transient org.apache.lucene.search./*@Nullable*/ Query cached_results;
Run Code Online (Sandbox Code Playgroud)

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