如何动态知道加载的类是否为应用程序类?

问题描述 投票:0回答:1

我处于一种情况,我想对已加载的(即当前正在运行的应用程序类)进行一些重写。我不想重写已加载的库类。因此,我需要根据类的类型(是应用程序类还是没有应用程序类)对重写进行过滤,或者我可以通过检查ClassLoader看看它是否属于应用程序类来实现。

为了提供一些上下文,让我们假设我有以下代码

    URLClassLoader urlcl = new URLClassLoader(cp);
    Class c = urlcl.loadClass(_className);

假设_className是当前正在运行的类,它已被侦听器拦截,我怎么知道该类c是否是应用程序类?

非常感谢!

java classloader
1个回答
3
投票

我不完全是应用程序类的意思,但是那些提示可能仍然有用。

您可以简单地检查一个类是否是另一个类的子类型:

public static boolean is1stSubTypeOf2nd(Class clazz1, Class clazz2) {
    return clazz2.isAssignableFrom(clazz1);
}

如果要检查该类是否属于某个程序包(以检查它是否来自标准API,第三方库,请使用:

public static boolean isInPackage(Class clazz, String packageName) {
    return clazz.getPackageName().contains(packageName);
}

此外,标准API还能为您提供有关给定类的所有超类的信息。

© www.soinside.com 2019 - 2024. All rights reserved.