【问题标题】:Is there a way to check in Java runtime if an object has a specific method?如果对象具有特定方法,有没有办法检查 Java 运行时?
【发布时间】:2016-06-09 20:26:56
【问题描述】:

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

【问题讨论】:

  • 看看反射 API。一个更好的解决方案可能是定义一系列接口,以便更容易和更快地检查接口中的成员关系,然后反映一个类
  • 你应该让它们都实现一个声明方法的接口,或者将方法放在超类中,而不是使用反射。
  • 即使是那些你不能调用的(没有反射):ideone.com/vy2OP0
  • 无论你在做什么,这都是个坏主意。请不要。

标签: java rtti


【解决方案1】:

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

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

当然,这也可以改进为包含方法的签名,但基本思想保持不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多