我正在制作一个Android应用程序,其中我有一个功能。我想使用注释来调用它。 我的功能类似于
public static void fn(String s1, String s2, double val) {
//do something
}
有没有办法让我可以用注释调用这个函数。
例如@callFunc
答案 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
注释的方法的代理。在此代理中,您可以在调用带注释的方法之前或之后执行代码。