2016-06-09 44 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)); 
} 

這當然,可以細化到包括方法的簽名也一樣,但基本想法保持不變。

相關問題