2016-06-09 61 views
3

我有一个类,它有多个子类,每个子类实现自己的方法。其中一些子类具有我需要调用的通用方法。 java有没有办法知道对象是否有方法(不使用instanceof)?有没有办法检查Java运行时,如果一个对象有一个特定的方法?

+3

看看Reflection API。更好的解决方案可能是定义一系列接口,因为它更容易和更快速地检查接口中的成员资格,然后反映类 – MadProgrammer

+4

而不是使用反射,您应该让它们全部实现声明方法的接口,方法在超类中。 –

+0

即使是你不能打电话的人(没有反思):http://ideone.com/vy2OP0 – zapl

回答

9

这可能指向一个设计缺陷,但你总是可以使用反射来检查方法的存在:

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

这当然,可以细化到包括方法的签名也一样,但基本想法保持不变。

相关问题