Method方法中的invoke方法以及getAnnotation方法

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());
        }
    }
}
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值