diff --git a/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt b/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt index c4734d96..af841122 100644 --- a/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt +++ b/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt @@ -146,7 +146,12 @@ infix fun Class<*>?.notExtends(other: Class<*>?) = extends(other).not() */ infix fun Class<*>?.implements(other: Class<*>?): Boolean { if (this == null || other == null) return false - return interfaces.takeIf { it.isNotEmpty() }?.any { it.name == other.name } ?: false + /** + * 获取当前 [Class] 实现的所有接口类 + * @return [Set]<[Class]> + */ + fun Class<*>.findAllInterfaces(): Set> = mutableSetOf(*interfaces).apply { superclass?.also { addAll(it.findAllInterfaces()) } } + return findAllInterfaces().takeIf { it.isNotEmpty() }?.any { it.name == other.name } ?: false } /** @@ -406,4 +411,4 @@ inline fun Class<*>.allConstructors(isAccessible: Boolean = true, result: (index * @param result 回调 - ([Int] 下标,[Field] 实例) */ inline fun Class<*>.allFields(isAccessible: Boolean = true, result: (index: Int, field: Field) -> Unit) = - declaredFields.forEachIndexed { p, it -> result(p, it.also { e -> e.isAccessible = isAccessible }) } \ No newline at end of file + declaredFields.forEachIndexed { p, it -> result(p, it.also { e -> e.isAccessible = isAccessible }) }