将Java对象/字符串转换为实际的类

时间:2016-05-20 03:43:09

标签: java class testing casting annotations

我通过以下方式获得了Java类列表:

List<String> cF = classFinder.findClassesInPackage("com.some.test", Info.class); 

其中classFinder是服务/类,findClassesInPackage方法查找包含com.some.test注释的包@Info中的所有类。 Info.class是第二个参数,它只是界面。

我的列表cF现已填写以下内容:

[com.some.test.example.FollTest, com.some.test.example.SubsTest, ..]

现在,我将此List cF转换为Set以通过以下方式删除重复的方法:

Set<String> set = new HashSet<String>(cF);

目的

我希望iterate超过此集合,以便我可以获取所有classes one-by-one并最终获得每个类中的所有Info注释并打印它们。我需要这个,因为我将在之后解析这些注释。

我担心:set元素现在是字符串,我如何将它们转换为实际的类? (For example: out of my first element in set: com.some.test.example.FollTest, I just want FollTest that too in class form)

以下是我首先尝试为单个元素做的事情:

Object check = set.toArray()[0]; - 仍然是一个Object / String,而不是我想要的实际类。

然后阅读注释(例如):

for (Annotation annotation : ClassName.class.getAnnotations()) {
            Class<? extends Annotation> type = annotation.annotationType();
            System.out.println("Values of " + type.getName());

            for (Method method : type.getDeclaredMethods()) {
                Object value = method.invoke(annotation, (Object[])null);
                System.out.println(" " + method.getName() + ": " + value);
            }
        }

How do I get above ClassName? (although I have them in the String/Object form as part of list/set).

更新了问题:此外,一旦找到班级名称,如何获取该班级中的所有注释并将其打印出来?

参考:http://www.java2s.com/Code/Java/Reflection/Getannotationbyannotationclass.htm,了解如何在特定班级中获取注释。

1 个答案:

答案 0 :(得分:0)

您应该可以使用Class.forName()

执行此操作

示例

String className = "com.some.test.example.FollTest";

Class c = Class.forName(className);

Annotation[] annotation = c.getAnnotations();