2 回答
TA贡献1877条经验 获得超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);
}
调用该方法:
boolean result = isInstanceOfInterface(new Dog(), CanBark.class);
笔记
您的问题听起来像是XY 问题。首先可能有更好的解决方案来解决您试图通过此尝试解决的问题。
如果可以避免的话,丢失类型信息,将系统降级到不再是编译时安全的系统通常是非常糟糕的。
考虑重新思考/设计你的方法。不过,请注意,我不知道您首先要解决什么问题。
TA贡献2037条经验 获得超6个赞
您不需要为此创建方法。简单使用
boolean doesImplement = ITest.class.isAssignableFrom(Test.class)
在实例的情况下,使用 instance.getClass() 即
boolean doesImplement = ITest.class.isAssignableForm(testObj.getClass())
添加回答
举报