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

时间:2017-04-22 15:31:36

标签: 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;
}

上 私人名单&lt; @A java.lang.Integer&gt; integers2; 得到一个错误: 错误:(20,21)java:找不到符号   符号:类java   location:class com.company.Main

是程序中的错误吗?

1 个答案:

答案 0 :(得分:4)

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

  

如果满足以下两个条件,则允许使用类型注释:

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

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

    < / LI>   

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

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