为什么我无法从已加载的Java类中检测注释?

埃尔帕齐奥

我有一个插件,我想从我的maven项目中访问模型包的类列表。到目前为止,我只是这样做将类加载到插件中:

try {
            runtimeClasspathElements = project.getRuntimeClasspathElements();

        } catch (DependencyResolutionRequiredException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        URL[] runtimeUrls = new URL[runtimeClasspathElements.size()];
        for (int i = 0; i < runtimeClasspathElements.size(); i++) {
          String element = (String) runtimeClasspathElements.get(i);
          try {
            runtimeUrls[i] = new File(element).toURI().toURL();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

newLoader = new URLClassLoader(runtimeUrls,
      Thread.currentThread().getContextClassLoader());
      try {          class=newLoader.loadClass("com.pkl.bc.personnaldata.model.Personne");

    if(class!=null)
        System.out.println(class.getCanonicalName());
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

直到这里,我才能看到我班的全名。

System.out.println(class.getDeclaredFields());
System.out.println(class.isAnnotationPresent(EditColumn.class));
for (Field f : class.getDeclaredFields()) {

                EditColumn v = f.getAnnotation(EditColumn.class);
                if (v != null) {

                    System.out.println(v.tableName());
                    System.out.println(v.oldName());

                }

            }

但我什么也没得到,这是输出:

[Ljava.lang.reflect.Field;@398f573b
false

我也尝试使用反射

Reflections reflections = new Reflections("com.pkl.bc.personnaldata.model.Personne");

          Set<Field> annotated = reflections.getFieldsAnnotatedWith(EditColumn.class);

          System.out.println(annotated);

这给了我一个空白清单。这是我的注释:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface EditColumn {

    String oldName() default "";

    String newName() default "";

    String tableName() default "";
}

带注释的字段:

@EditColumn(newName = "main_adress", oldName = "adress", tableName = "Personne")
    private String main_adress;
拉鲁什

您已经在使用其批注来检索该类,但是您只需要添加一个循环即可为您拥有的每个字段初始化所有批注。

尝试这个示例,当已加载的类的字段可用时,它将打印注释名称及其值。

  for (Field f : loadedClass.getDeclaredFields()) {
                System.out.println(f.getName());
                for (Annotation a : f.getAnnotations()) {
                    System.out.println("## SHOWING ANNOTATION FOR FIELD:" + f.getName());
                    System.out.println(a.toString());
                }


            }

您可以解析toString以获取该注释上的值。等待您的反馈。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么无法在Java中扩展注释?

为什么我会收到任何 Java 代码的“错误:无法找到或加载主类”?

Java中的注释为什么要创建类类型引用?

为什么Aruco无法在我的图像中检测到标记

Java反射-类加载器检测新旧软件包中的已移动类

为什么Jaca类中的@Value无法在application.properties java springboot中加载属性

为什么我们需要Java中的用户定义的类加载器

为什么Feedly无法在Chrome Ubuntu中为我加载?

为什么我的图像无法加载到Recyclerview中

为什么我已部署的Symfony应用程序无法加载bundles.php文件?

为什么Disqus注释无法通过https加载?

如果我使用多个捕获块,为什么Java无法检测到无法到达的捕获块?

为什么我的自动加载器加载 wp 安装中的每个类?

为什么我的代码无法正确加载?

为什么我的UIView无法加载?

为什么我的加载无法正常工作

为什么Xcode无法加载我的NIB

为什么我的块无法加载?

为什么我无法加载谷歌地图?

为什么我的视图无法加载

为什么gcc无法从其前向声明中检测到好友类名称空间?

使用Java中的特定注释检测所有类

Java:找出*为什么*加载类

为什么我们需要Java中的Properties类?

为什么我需要 Java 中的 Node 类用于 LinkedList?

为什么我在 Java 中收到“找不到类”错误?

无法创建我的类的对象 - 为什么?

为什么我无法在我的 AndroidViewModel 类中访问我的应用程序?

无法从tomcat中的自定义类加载器加载的类中获取注释