我在一个类中有两个注释说@ annotation_1和@ annotation_2,这意味着我创建了两个实例。 ---如果有任何错误,请更正此声明!
现在,我找到所有使用@ annotation_1或@ annotation_2注释的方法,现在我需要测量每个带注释的方法所花费的时间。
例如,
startTime = System.nanoTime();
现在考虑我需要为每个仅使用@ annotation_1注释的方法测量nanoTime()。所以我使用system.nanotime()来测量在按
调用之前方法所花费的时间 Object obj = null;
try {
startTime = System.nanoTime();
m.invoke(obj);
}finally{
stopTime = System.nanoTime();
runTime = BigDecimal.valueOf(stopTime - startTime);
}
然后我使用
调用带注释的方法for(Class<?> currentClass: args){
List < Method > methods = Arrays.asList(currentClass.getDeclaredMethods());
for (Method m: methods) {
Annotation[] annotations = m.getDeclaredAnnotations();
for (Annotation annotation: annotations) {
if ((annotation instanceof annotation_1)) {
... //code to find time by invoking method as given above
} else if ((annotation instanceof annotation_2)) {
...//code to find time by invoking method as given above
} else
{
System.err.println("No. definition for annotation : @"+annotation);
}
}
}
}
然后使用“m.invoke(obj)”调用,我需要这样做,因为我可能正在访问使用@ annotation_1注释的非静态方法。即,我需要调用Method1,然后为它找到runTime,然后调用Method3,然后一个接一个地找到它们的runTime。
但你可以看到这个调用创建了两个实例,即@ annotation_1和@ annotation_2,尽管我只考虑了“annotation_1”注释方法。
如何摆脱此调用。是否有另一种方法来调用使用特定注释注释的方法??
提前致谢.... :)
修改:1
检索方法:
{{1}}
Args在运行时获取所有类名。
答案 0 :(得分:0)
您只需要具有这些方法的Class的一个实例,之后您可以使用该对象来调用任何这些方法。