我通过以下方式获得了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,了解如何在特定班级中获取注释。
答案 0 :(得分:0)
您应该可以使用Class.forName()
执行此操作示例强>:
String className = "com.some.test.example.FollTest";
Class c = Class.forName(className);
Annotation[] annotation = c.getAnnotations();