如何实现类似@Override java注释的东西?

时间:2015-06-28 08:22:31

标签: java annotations java-8

../java/lang/Override.java中使用此jdk代码,

package java.lang;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)

public @interface Override {
}

只有注释声明,java编译器足够智能检测错误(编译时):

The method toString123() of type Example must override or implement a supertype method

在下面的问题代码中。

package annotationtype;

public class Example {

    @Override public String toString() {
       return "Override the toString() of the superclass";
    }

    @Override public String toString123() {
       return "Override the toString123() of the superclass";
    }

    public static void main(String[] args) {

    }


}

Override的注释声明只是编译成,

interface java.lang.Override extends java.lang.annotation.Annotation{
}

只不过是interface

所以,

interface java.lang.Override语法如何帮助java编译器在编译时检测上述错误?

2 个答案:

答案 0 :(得分:6)

触发编译错误的实现并不在于注释,它位于Java编译器中。

如果您想编写自己的类似注释处理器,可以使用注释处理器API:http://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/Processor.html

答案 1 :(得分:5)

  

只不过是一个界面。

     

所以,

     

接口java.lang.Override语法如何帮助java编译器   在编译时检测上面的错误?

没错。 Override只不过是一个界面。实际工作由java编译器完成。编译器如何执行此操作未指定。

以下是一些说明如何使用AnnotationProcessor实现与@Override类似的内容的链接:

  1. Processor Java doc
  2. Java annotation processing tool
  3. Code generation using AnnotationProcessor
  4. Annotation Processor, generating a compiler error
  5. Source code analysis using Java 6 API
  6. Playing with Java annotation processing