invoke方法
public class Animal {
public void print(){
System.out.println("Animal.print()");
}
}
public class Cat extends Animal {
@Override
public void print(){
System.out.println("Cat.print()");
}
}
public class Dog extends Animal {
@Override
public void print(){
System.out.println("Dog.print()");
}
public void say(String name){
System.out.println("我是"+name);
}
}
public class Main {
public static void main(String[] args) {
// write your code here
try {
Method animalMethod = Animal.class.getDeclaredMethod("print"); //获取Animal类的print方法
Method catMethod = Cat.class.getDeclaredMethod("print"); //获取cat类的print方法
Animal animal = new Animal(); //新建一个animal类
Cat cat = new Cat(); //新建一个cat类
//这里由于print()方法没有参数,所以invoke的第二个参数args可以不用填写
animalMethod.invoke(animal); // animal实例调用Animal类的print方法 ---> Animal.print();
animalMethod.invoke(cat); // cat实例调用Animal类的print方法 ---> Cat.print();
catMethod.invoke(cat); // cat实例调用Cat类的print方法 ---> Cat.print();
catMethod.invoke(animal);// animal实例调用Cat类的print方法 ---> 出错
//这里出错元音很简单,因为animal是Cat的父类,他是不可调用子类中的方法的
} catch (Exception e) {
e.printStackTrace();
}
try {
Method dogMethod = Dog.class.getDeclaredMethod("say", String.class);
Dog dog = new Dog();
//由于Dog类的say方法是具有参数的,所以invok的第二个参数需要传入一个String类型参数
//invoke的第一个参数传入的是调用者
dogMethod.invoke(dog,"旺财");
} catch (Exception e) {
e.printStackTrace();
}
}
}
getAnnotation方法
public class SampleClass {
private String sampleField;
@CustomAnnotaion(name="getSampleField ",value = "Sample Method Annotation")
public String getSampleField() {
return sampleField;
}
public void setSampleField(String sampleField) {
this.sampleField = sampleField;
}
}
//自己定义一个注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface CustomAnnotaion{
public String name();
public String value();
}
public class Main {
public static void main(String[] args) {
// write your code here
Method[] methods = SampleClass.class.getMethods();
//获取某一个方法上的某个注解,要是没有该注解则返回null,有的话就返回该注解的类型
CustomAnnotaion annotation = methods[0].getAnnotation(CustomAnnotaion.class);
if(annotation instanceof CustomAnnotaion){
System.out.println(annotation.name());
System.out.println(annotation.value());
}
}
}