Java 类的编译器检查注释

Java 类的编译器检查注释,java,annotations,Java,Annotations,当我将类作为方法参数传递时,编译器是否可能检查注释是否定义在类上 我想使用一个注释,就像一个标记接口。不使用接口标记接口: void method(Class<? extends MarkerInerface>); 有什么办法吗 编辑:以下代码应导致编译器错误: method(Object.class); // Error since Object doesn't have MyAnnotation defined method(MyClass.class); // fine.

当我将
作为方法参数传递时,编译器是否可能检查
注释
是否定义在

我想使用一个
注释
,就像一个标记
接口
。不使用接口
标记接口

void method(Class<? extends MarkerInerface>);
有什么办法吗

编辑:以下代码应导致编译器错误:

method(Object.class); // Error since Object doesn't have MyAnnotation defined
method(MyClass.class); // fine.

@MyAnnotation
public class MyClass {...}

您可以使用类似的方法,但首先要准备注释列表,以便 添加到扫描仪

ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFALT_FILTER>);

scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));

for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
    System.out.println(bd.getBeanClassName());
ClassPathScanningCandidateComponentProvider扫描仪=
新建ClassPathScanningCandidateComponentProvider();
addIncludeFilter(新的AnnotationTypeFilter(.class));
对于(BeanDefinition bd:scanner.findCandidateComponents())
System.out.println(bd.getBeanClassName());

您想做什么就做什么。语法是
类这很好,但不符合我的需要。你能让你的问题更具体一些吗,比如显示编译器应该批准的符合要求的客户端代码,以及显示编译器应该发出警告的不符合要求的客户端代码?完成。希望现在清楚了。顺便说一句,我考虑的更多的是编译器错误而不是警告。
ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFALT_FILTER>);

scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));

for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
    System.out.println(bd.getBeanClassName());
import org.checkerframework.checker.interning.qual.Interned;

public class ClassWithAnnotationTest {

  @Interned
  public class MyClass {}

  void method(Class<? extends @Interned Object> arg) {}

  void client() {
    method(Object.class);   // Error, Object isn't annotated by @Interned.
    method(MyClass.class);  // Fine.
  }
}
$ch/bin/javac -g ClassWithAnnotationTest.java -processor interning
ClassWithAnnotationTest.java:11: error: [argument.type.incompatible] incompatible types in argument.
    method(Object.class);   // Error, Object isn't annotated by @Interned.
                 ^
  found   : @Interned Class<Object>
  required: @Interned Class<? extends @Interned Object>
1 error