使用完全限定类型时,类型注释抛出“找不到符号”

use*_*796 5 java types annotations

package com.company;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.List;

public class Main {

    @Target(ElementType.TYPE_USE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface A {}

    public static void main(String[] args) {
    }

    private List<@A Integer> integers1;

    private List<@A java.lang.Integer> integers2;
}
Run Code Online (Sandbox Code Playgroud)

我收到 private List<@A java.lang.Integer> integers2; 错误:

错误:(20, 21) java: 找不到符号符号:类 java
位置:类 com.company.Main

是程序中的bug吗?

Rad*_*def 5

这显然是正常行为(9.7.4):

如果满足以下两个条件,则类型注释是可接受的:

  • 与注释最接近的简单名称被分类为 a TypeName,而不是 a PackageName

  • 如果与注释最接近的简单名称后面带有“.” 另一个TypeName- 也就是说,注释显示为@Foo T.U- thenU表示 的内部类T

换句话说,@A最接近 ( java) 的简单名称是 a PackageName,因此该注释是不可接受的,并且会发生编译器错误。

限定名称上的类型注释的正确语法是java.lang.@A Integer