@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
public String value();
}
2.自定义类,如类A,方法前添加注解
public class A {
@Test("do")
public void f1(){
System.out.println("f1()");
}
public void f2(){
System.out.println("f2()");
}
@Test("info")
public void f3(String info,int age){
System.out.println(info+":"+age);
}
@Test("hello")
public String f4(){
return "hello";
}
}
3,编写测试类AnnotationTest
public class AnnotationTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name=scanner.next();
try {
Class<?> c = Class.forName(name);
Object obj = c.newInstance();
Method[] methods = c.getDeclaredMethods();
for(Method mt:methods){
Test test = mt.getDeclaredAnnotation(Test.class);
String value=null;
if(test!=null){
Class<?>[] types = mt.getParameterTypes();
value = test.value();
Object result;
if(types.length==0){
result = mt.invoke(obj);
System.out.println(result);
}else{
Object[] params=new Object[types.length];
for (int i = 0; i < params.length; i++) {
if(types[i]==String.class){
params[i]="张三";
}else if(types[i]==int.class){
params[i]=18;
}
}
result=mt.invoke(obj, params);
System.out.println(result);
}
}
System.out.println(test+":"+value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}