Method类(反射)

下面先写一个普通的
1、接口

package com.linfeng.pojo;

public interface HelloService {
    public void sayHello(String name);
}

2、实现类

package com.linfeng.pojo;

public class HelloServiceImpl implements HelloService{

    public void sayHello(String name) {
        System.out.println("hello"+name);
    }
}

3、测试

import com.linfeng.pojo.HelloService;
import com.linfeng.pojo.HelloServiceImpl;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MyTest {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
       HelloServiceImpl service = new HelloServiceImpl();
        service.sayHello("林峰");

    }
}

在这里插入图片描述
下面我们使用反射机制进行创建sayhello方法,核心Method(类中的方法)

import com.linfeng.pojo.HelloService;
import com.linfeng.pojo.HelloServiceImpl;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MyTest {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//        HelloServiceImpl service = new HelloServiceImpl();
//        service.sayHello("林峰");

        //下面我们使用反射机制进行创建sayhello方法,核心Method(类中的方法)
        HelloServiceImpl target = new HelloServiceImpl();
        //获取sayhello名称对应的method类
        Method method = HelloService.class.getMethod("sayHello", String.class);//类中的方法,类型
        //通过method可以执行sayhello方法调用
        /*
        invoke是method类中的一个方法,表示执行方法的调用
        参数:
            1、object  ,表示对象的。要执行这个对象的方法
            2、object...args     方法执行时的参数值
         返回值:Object
        * */

        //method.invoke所表达的意思是:执行target对象sayhello方法,参数是林峰
        Object ret = method.invoke(target,"林峰");
                  //method代表sayHello方法,这个方法关联着一个对象,这里我们是target对象
    }
}

class.getMethod
Method method = HelloService.class.getMethod(“sayhello”, String.class,Integer.class);
提出问题?

public Method getMethod(String name, Class<?>... parameterTypes)

加入,该方法的参数有多个该怎么办?
parameterTypes参数是一个类对象数组,按声明的顺序标识方法的形式参数类型。

Method.invoke
public Object invoke(Object obj,Object… args)

  • public Object invoke(Object obj, Object… args)
  •   表示执行方法的调用
    
  • 参数:
  •   1.Object,表示对象,要执行这个对象的方法
    
  •   2.Object...args,方法执行时的参数值
    
  • 返回值:
  •   Object:方法执行后的返回值
    

/*
invoke是method类中的一个方法,表示执行方法的调用
参数:
1、object ,表示对象的。要执行这个对象的方法
2、object…args 方法执行时的参数值
返回值:Object
* */
//method.invoke所表达的意思是:执行target对象sayhello方法,参数是林峰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
反射Method的使用可以通过以下步骤: 1. 获取Class对象:首先需要获取要反射的Class对象,可以通过名调用Class.forName()方法或者使用的class属性获取。 2. 获取Method对象:接下来需要获取要反射的方法的Method对象,可以通过Class对象的getMethod()、getDeclaredMethod()、getMethods()、getDeclaredMethods()等方法获取。 3. 设置方法可访问性:如果要反射的方法是私有的,需要设置方法的可访问性为true,否则会抛出IllegalAccessException异常。 4. 调用方法:最后,使用Method对象的invoke()方法调用方法,并传入方法所属的对象和方法参数,如果方法没有返回值,invoke()方法返回null,否则返回方法返回值。 以下是一个示例代码,演示了如何使用反射Method来调用一个的方法: ```java public class MyClass { private void myMethod(String str, int num) { System.out.println("My method: " + str + ", " + num); } } public class Main { public static void main(String[] args) throws Exception { MyClass obj = new MyClass(); Class<?> cls = obj.getClass(); Method method = cls.getDeclaredMethod("myMethod", String.class, int.class); method.setAccessible(true); method.invoke(obj, "Hello", 123); } } ``` 在上述示例代码中,我们首先创建了一个MyClass,并定义了一个私有的myMethod()方法。然后我们通过Class的getDeclaredMethod()方法获取了myMethod()方法的Method对象,并设置其可访问性为true。最后,我们使用Method对象的invoke()方法调用了myMethod()方法,并传入了一个字符串和一个整数作为参数。运行上述代码,输出结果为: ``` My method: Hello, 123 ``` 这说明我们成功地使用反射Method调用了一个的私有方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值