3
我有一个类,它有多个子类,每个子类实现自己的方法。其中一些子类具有我需要调用的通用方法。 java有没有办法知道对象是否有方法(不使用instanceof
)?有没有办法检查Java运行时,如果一个对象有一个特定的方法?
我有一个类,它有多个子类,每个子类实现自己的方法。其中一些子类具有我需要调用的通用方法。 java有没有办法知道对象是否有方法(不使用instanceof
)?有没有办法检查Java运行时,如果一个对象有一个特定的方法?
这可能指向一个设计缺陷,但你总是可以使用反射来检查方法的存在:
public static boolean hasMethod(Object obj, String methodName) {
return Arrays.stream(obj.getClass().getMethods())
.anyMatch(m -> m.getName().equals(methodName));
}
这当然,可以细化到包括方法的签名也一样,但基本想法保持不变。
看看Reflection API。更好的解决方案可能是定义一系列接口,因为它更容易和更快速地检查接口中的成员资格,然后反映类 – MadProgrammer
而不是使用反射,您应该让它们全部实现声明方法的接口,方法在超类中。 –
即使是你不能打电话的人(没有反思):http://ideone.com/vy2OP0 – zapl