getDeclaredMethod 方法是干什么的?

getDeclaredMethod 是 Java 反射机制中的一个方法,它用于获取指定类中声明的某个方法。通过使用该方法,可以在运行时动态地获取类的方法信息,然后通过反射调用这些方法。

getDeclaredMethod 方法有两个参数:

  1. name 表示要获取的方法的名称,类型为字符串。
  2. parameterTypes 表示方法的参数类型,是一个可变参数。

使用 getDeclaredMethod 方法可以获取类中声明的所有方法,包括公有方法、私有方法、受保护方法和包访问级别方法。如果指定的方法不存在,则会抛出 NoSuchMethodException 异常。

以下是 getDeclaredMethod 方法的示例用法:

import java.lang.reflect.Method;

public class MyClass {
    public void myMethod(String arg) {
        System.out.println("Hello, " + arg);
    }
}

public class Main {
    public static void main(String[] args) {
        try {
            Class<?> clazz = MyClass.class;
            Method method = clazz.getDeclaredMethod("myMethod", String.class);
            System.out.println("Method name: " + method.getName());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

 在上述示例中,通过 getDeclaredMethod 方法获取了 MyClass 类中名为 myMethod 的方法,并打印出了该方法的名称。请注意,getDeclaredMethod 方法抛出的异常需要进行处理,否则程序会报错。

方法的参数类型如果改成其他的类型会怎么样?

如果使用 getDeclaredMethod 方法获取方法时,参数类型与实际方法的参数类型不匹配,会导致 NoSuchMethodException 异常的抛出。

在 Java 中,方法的参数类型是方法签名的一部分,如果参数类型不匹配,则会导致方法的唯一标识无法匹配,因此无法获取到该方法。因此,当尝试获取方法时,确保提供正确的参数类型是至关重要的。

如果参数类型不匹配,可以考虑使用 getDeclaredMethods 方法获取类中声明的所有方法,然后遍历方法列表,逐个比较方法的参数类型,找到匹配的方法。

下面是一个示例,展示了如何根据参数类型获取方法:

import java.lang.reflect.Method;

public class MyClass {
    public void myMethod(String arg) {
        System.out.println("Hello, " + arg);
    }

    public void myMethod(int arg) {
        System.out.println("Hello, " + arg);
    }
}

public class Main {
    public static void main(String[] args) {
        try {
            Class<?> clazz = MyClass.class;
            Method[] methods = clazz.getDeclaredMethods();
            
            // 遍历方法列表,找到匹配参数类型的方法
            for (Method method : methods) {
                if (method.getName().equals("myMethod") && method.getParameterTypes()[0].equals(String.class)) {
                    System.out.println("Method name: " + method.getName());
                    break;
                }
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

 在上述示例中,使用 getDeclaredMethods 方法获取了 MyClass 类中声明的所有方法,并通过遍历方法列表,根据参数类型找到了匹配的方法。请注意,这只是一种示例方法,并不能处理所有情况。实际使用中,可能需要根据业务逻辑和需求进行适当的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李少武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值