2 回答

TA貢獻1877條經(jīng)驗 獲得超1個贊
解釋
您需要將接口作為Class(文檔)令牌傳遞。此外,您需要檢查相反的方式:interfaceToTestAgainst.isInstance(classToTest). 目前,您正在嘗試檢查接口是否是該類的實例。
boolean doesImplementInterface(Object classToTest, Class<?> interfaceToTestAgainst) {
if (!interfaceToTestAgainst.isInterface()) {
return false;
}
return interfaceToTestAgainst.isInstance(classToTest);
}
或在一行中:
boolean doesImplementInterface(Object classToTest, Class<?> interfaceToTestAgainst) {
return interfaceToTestAgainst.isInterface()
&& interfaceToTestAgainst.isInstance(classToTest);
}
稍微改了一下名字:
boolean isInstanceOfInterface(Object obj, Class<?> interfaceToken) {
return interfaceToken.isInterface()
&& interfaceToken.isInstance(obj);
}
調(diào)用該方法:
boolean result = isInstanceOfInterface(new Dog(), CanBark.class);
筆記
您的問題聽起來像是XY 問題。首先可能有更好的解決方案來解決您試圖通過此嘗試解決的問題。
如果可以避免的話,丟失類型信息,將系統(tǒng)降級到不再是編譯時安全的系統(tǒng)通常是非常糟糕的。
考慮重新思考/設(shè)計你的方法。不過,請注意,我不知道您首先要解決什么問題。

TA貢獻2037條經(jīng)驗 獲得超6個贊
您不需要為此創(chuàng)建方法。簡單使用
boolean doesImplement = ITest.class.isAssignableFrom(Test.class)
在實例的情況下,使用 instance.getClass() 即
boolean doesImplement = ITest.class.isAssignableForm(testObj.getClass())
添加回答
舉報