【问题标题】:How to annotate a code block in Java如何在 Java 中注释代码块
【发布时间】:2014-06-15 12:09:44
【问题描述】:

是否可以注释代码块?例如。循环或简单的大括号?如果有,怎么做?

First.java

package An;
import An.ForCycle;

class First {
    public static void main(String[] args) {
        First f = new First();
    }

    public First () {

        @ForCycle
        {   // error: illegal start of type {
            int k;
        }

        @ForCycle
        for (int i = 0; i < 5; i++) {   // similar error (illegal start...)
            System.out.println(i);
        }
    }
}

ForCycle.java

package An;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.SOURCE)
public @interface ForCycle {}

根据http://www.javacodegeeks.com/2012/11/java-annotations-tutorial-with-custom-annotation.html

@Target – 指示注释类型适用的程序元素的种类。一些可能的值是 TYPE、METHOD、CONSTRUCTOR、FIELD 等。如果 Target 元注释不存在,则注释可用于任何程序元素。

任何程序元素(我猜)也意味着阻塞,不是吗?那么为什么我不能注释 blockfor?我错过了什么?

感谢您的帮助

【问题讨论】:

  • 只是想知道,为什么要注释块?我们不能使用评论来实现吗?
  • @fajarkoe 我使用 ANTLR 作为 AST 树解析器编写了一个替代的自动并行化预处理器。 Java8 语法可以识别注解但当然不能识别 cmets。我打算像@parallel for (..) {...}
  • 任何人都知道 JSR308 的状态,似乎想要做提问者想要的? code.google.com/p/jsr308-langtools/wiki/AnnotationsOnStatements
  • 你有什么选择吗?除了使用注解

标签: java annotations block


【解决方案1】:

不,你不能这样做。实际上你已经自己回答了你的问题。有一个可以使用注释的目标列表:{TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}。如您所见,没有“块”之类的东西。为什么?可能是因为注释必须附加到命名的东西上,例如方法、字段、类等。

确实想想怎么能用使用注解呢?使用反射 API 访问注释。您可以请求特定方法或字段的注释。您希望如何请求块注释?

最后的通知。注释可以在运行时或编译时使用。编译器、IDE 和注释处理器使用编译时可用的注释来生成额外的警告、错误或代码。 IntelliJ 作为具有大量静态代码分析功能的知名 IDE,支持所谓的“块注释”,这些注释在语法上是常规的内联 cmets,但被 IDE 视为可以抑制某些警告的注释。

【讨论】:

    【解决方案2】:

    它的意思是“任何程序元素已经列出的”。

    关于此事的最后一句话,一个简单的参考Java Language Specification

    注解可以用作任何声明中的修饰符,无论是包、类(包括枚举)、接口(包括注解类型)、字段、方法、形参、构造函数还是局部变量。

    注解也可用于枚举常量。

    【讨论】:

      【解决方案3】:

      “任何程序元素”在这里是指“来自指定列表”的含义,即“默认是所有值”这句话说的。

      一般来说这是不可能的,因为只有编译器才能处理代码块并将所有代码块压缩成以复杂方式混合的字节码。除了编译指南之外,这种注释没有任何可能的用途

      【讨论】:

      • 块级注释可能有很多用途,例如事务、日志记录、访问控制,应有尽有。
      • @DaveNewton 除了像@SuppressWarnings 这样的只编译注解,框架如何读取块级注解?如果某段代码对于切入点来说足够重要,那么拥有一个方法就足够重要了。
      • @chrylis 这是两个完全不同的点。 如何 并不真正相关,因为我们谈论的是一种假设情况,但任何都可以表示。第二个是应该这样做,我倾向于同意,但也可以看到潜在的用途。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2015-09-30
      • 2019-12-26
      • 1970-01-01
      • 2019-07-03
      • 2012-10-07
      • 1970-01-01
      相关资源
      最近更新 更多