有没有办法在Java运行时检查对象是否有特定的方法?

有没有办法在Java运行时检查对象是否有特定的方法?,java,rtti,Java,Rtti,我有一个类,它有多个子类,每个子类实现自己的方法。其中一些子类有我需要调用的公共方法。java中是否有方法知道对象是否有方法(不使用instanceof)?这可能表明存在设计缺陷,但您始终可以使用反射来检查方法是否存在: public static boolean hasMethod(Object obj, String methodName) { return Arrays.stream(obj.getClass().getMethods()) .an

我有一个类,它有多个子类,每个子类实现自己的方法。其中一些子类有我需要调用的公共方法。java中是否有方法知道对象是否有方法(不使用
instanceof
)?

这可能表明存在设计缺陷,但您始终可以使用反射来检查方法是否存在:

public static boolean hasMethod(Object obj, String methodName) {
    return Arrays.stream(obj.getClass().getMethods())
                 .anyMatch(m -> m.getName().equals(methodName));
}

当然,也可以对其进行改进,以包括方法的签名,但基本思想保持不变。

看看反射API。更好的解决方案可能是定义一系列接口,因为检查接口中的成员资格比反映类更容易、更快。不使用反射,您应该让它们都实现一个声明方法的接口,或者将方法放入超类。即使是无法调用的接口(没有反射)当前位置无论你在做什么,这都是个坏主意。请不要。