Java 检测类是否为代理

2022-09-03 14:28:43

是否可以检测类是否是代理动态cglib或其他)?

让类和实现一个通用接口。然后我需要定义一个签名例程ABIclassEquals

public boolean classEquals(Class<? extends I> a, Class<? extends I> b);

使得它仅当 或 时计算结果为 true,其中表示类型(动态、cglib 或其他)的动态代理。a.equals(b)Proxy(a).equals(b)Proxy(a)A


在 的帮助下,这是到目前为止的样子:@Jigar Joshi

public boolean classEquals(Class a, Class b) {
    if (Proxy.isProxyClass(a)) {
        return classEquals(a.getSuperclass(), b);
    }
    return a.equals(b);
}

问题是它不能检测到例如CGLIB代理。


答案 2

如果可以接受,那么 clazz.isInstance(b) 也应该工作。instanceof

编辑:
我在阅读您修改后的答案之前写了。类也有类似的方法:

b.isAssignableFrom(a)