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