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