使用注释来调用函数

时间:2015-06-30 08:19:32

标签: java annotations

我正在制作一个Android应用程序,其中我有一个功能。我想使用注释来调用它。 我的功能类似于

public static void fn(String s1, String s2, double val) {
    //do something
}

有没有办法让我可以用注释调用这个函数。 例如@callFunc

3 个答案:

答案 0 :(得分:1)

我写了一个小例子。我使用注释@Replace替换注释Employee标记的@Replace字段中的非字母数字字符。我希望它可以提供帮助:

public static void main(String[] args) throws IOException {
    Employee employee = new Employee("Nguyen#@ Nhat^& Hoang<>");

    replace(employee);

    System.out.println(employee.getName());
}

public static void replace(Employee employee) {
    Field[] fields = employee.getClass().getDeclaredFields();
    for (int i = 0; i < fields.length; i++) {
        Replace replace =  fields[i].getAnnotation(Replace.class);
        if (replace != null) {
            try {
                fields[i].setAccessible(true);
                if (fields[i].get(employee) != null) {
                    fields[i].set(employee, String.valueOf(fields[i].get(employee)).replaceAll("[^A-Za-z0-9 ]", ""));
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}

@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Replace {
}

public static class Employee {
    @Replace
    private String name;

    public Employee(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

答案 1 :(得分:0)

不,注释被声明为@interface,例如......

@interface ClassPreamble {
   String author();
   String date();
   int currentRevision() default 1;
   String lastModified() default "N/A";
   String lastModifiedBy() default "N/A";
   // Note use of array
   String[] reviewers();
}

@ClassPreamble (
   author = "John Doe",
   date = "3/17/2002",
   currentRevision = 6,
   lastModified = "4/12/2004",
   lastModifiedBy = "Jane Doe",
   // Note array notation
   reviewers = {"Alice", "Bob", "Cindy"}
)
public class Generation3List extends Generation2List {

// class code goes here

}

他们没有实现来调用方法。你能够做到这一点的唯一方法是注释你的方法并使用反射,然后在反射过程中解析注释,然后根据反射调用这个方法。

答案 2 :(得分:0)

您可以结合使用方法注释(@Example)和AOP(面向方面​​编程)或AspectJ来创建围绕使用@Example注释的方法的代理。在此代理中,您可以在调用带注释的方法之前或之后执行代码。