Java 如何使用TypeMirror创建实例

Java 如何使用TypeMirror创建实例,java,annotation-processing,Java,Annotation Processing,我有一个注释,根据接收“动态”参数,即接口类型的参数。简言之: public interface MyInterface {} public @interface MyAnnotation { Class<? extends MyInterface> value(); } 公共接口MyInterface{} public@interface-MyAnnotation{ 类在注释处理期间,在一般情况下,不可能构造任何正在编译的类的实例。请记住,注释处理作为多步骤过程的一部分在编

我有一个注释,根据接收“动态”参数,即接口类型的参数。简言之:

public interface MyInterface {}

public @interface MyAnnotation {
  Class<? extends MyInterface> value();
}
公共接口MyInterface{}
public@interface-MyAnnotation{

类在注释处理期间,在一般情况下,不可能构造任何正在编译的类的实例。请记住,注释处理作为多步骤过程的一部分在编译器内部运行。不能保证类及其所有依赖项都已实际编译并准备在您的注释处理器正在执行


还请注意,您的批注声明无效。列出了批注元素的有效类型,用户定义界面的值不是其中之一。在批注处理期间,您最多只能拥有一个
类,在一般情况下,不可能构造任何正在编译的类的实例。请记住注释处理作为多步骤过程的一部分在编译器内部运行。不能保证在注释处理器执行时,类及其所有依赖项都已编译并准备好类加载

还请注意,您的注释声明无效。列出了注释元素的有效类型,用户定义界面的值不是其中之一。您最多只能得到一个
类答案是他删除了,因为它与Groovy相关,而与Java无关

然而,我确实认为这是相关的

当你使用Groovy时,你实际上可以这样做。

有一个答案,他删除了它,因为它与Groovy有关,而不是与Java有关

然而,我确实认为这是相关的


当您使用Groovy时,您实际上可以。

谢谢您的澄清。我更正了代码中的错误,谢谢您的注释。原始代码当然是正确的。我将组合一个新问题并从这里引用它:)新问题:谢谢您的澄清。我更正了代码中的错误,谢谢您的注释。原始代码是当然正确。我将组合一个新问题并从这里引用:)新问题:
// Get the full QualifiedTypeName
try {
  Class<?> clazz = annotation.type();
  qualifiedSuperClassName = clazz.getCanonicalName();
  simpleTypeName = clazz.getSimpleName();
} catch (MirroredTypeException mte) {
  DeclaredType classTypeMirror = (DeclaredType) mte.getTypeMirror();
  TypeElement classTypeElement = (TypeElement) classTypeMirror.asElement();
  qualifiedSuperClassName = classTypeElement.getQualifiedName().toString();
  simpleTypeName = classTypeElement.getSimpleName().toString();
}