首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问文件,只提取带注释的方法,从而进一步处理它们。

访问文件,只提取带注释的方法,从而进一步处理它们。
EN

Stack Overflow用户
提问于 2017-07-12 08:06:27
回答 1查看 42关注 0票数 0

我有以下情况:

,File2.java。Filen.java:我有不同的java文件,有不同的方法-- method1,method2 .方法。现在,这些文件中的一些方法被注释为@annotated_method。

现在我想创建一个java文件,它访问File1.java、File2.java .特定目录中的所有文件.Filen.java和我只需要对使用@annotated_method注释的方法进行分析(或进行一些处理)。分析(或该方法的处理)必须对每个注释的方法分别进行。

例如,

代码语言:javascript
复制
  File1.java:


    @annotated_method
    method 1{
    ...
    }

    method 2{
    ...
    }

    .
    .
    .
    @annotated_method
    method 13{
    ...
    }

    .
    .
    .

    method n
    {
    ...
    }




    File2.java:


    @annotated_method
    method x1{
    ...
    }

    method x2{
    ...
    }

    .
    .
    .
    @annotated_method
    method x13{
    ...
    }

    .
    .
    .

    @annotated_method
    method xn
    {
    ...
    }

如前所述,我只需要分析(或处理)方法1,13,x1,x13,xn。

如果我知道如何根据不同的需求进一步处理代码的注释部分,那就太好了。

我已经了解了getAnnotations();isAnnotationpresent()的用法;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 08:37:58

这可能对你有帮助:

代码语言:javascript
复制
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class TimeMeasurer {
    public static void gettimes(Class c) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
    {
        List<Method> methods=Arrays.asList(c.getMethods());
        for(Method m:methods)
        {
            List<Annotation> ans= Arrays.asList(m.getAnnotations());
            List<Class> classes = new ArrayList<>();
            for(Annotation a:ans)
            {
                classes.add(a.getClass());
            }
            //if(classes.contains(Deprecated.class))

            {
                if (m.getParameterCount()!=0)
                {
                    System.err.println("The method "+m.getName()+" could not be executed as it has parameters. Use a method with example values instead!");
                }
                else
                {
                    System.out.println("Executing Method: "+m.getName());
                    long stamp = System.nanoTime();
                    Object result=m.invoke(c);
                    long timeconsumed=System.nanoTime()-stamp;
                    System.out.println("Result of Method: "+result);

                    System.out.println("Time needed: "+timeconsumed);
                }
            }
        }
    }
    public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        gettimes(EndloseFormel.class);
    }
}

示例输出:

代码语言:javascript
复制
Executing Method: testmethode
Result of Method: 123
Time needed: 5748
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45051912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档