gpt4 book ai didi

java - 在Java中,是否可以知道一个类是否已经被加载?

转载 作者:IT老高 更新时间:2023-10-28 20:46:26 25 4
gpt4 key购买 nike

是否有可能知道是否已加载 Java 类,而 没有尝试加载它? Class.forName 尝试加载类,但我不希望出现这种副作用。还有其他方法吗?

(我不想重写类加载器。我正在寻找一个相对简单的方法。)

最佳答案

(感谢 Aleksi)这段代码:

public class TestLoaded {
public static void main(String[] args) throws Exception {
java.lang.reflect.Method m = ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[] { String.class });
m.setAccessible(true);
ClassLoader cl = ClassLoader.getSystemClassLoader();
Object test1 = m.invoke(cl, "TestLoaded$ClassToTest");
System.out.println(test1 != null);
ClassToTest.reportLoaded();
Object test2 = m.invoke(cl, "TestLoaded$ClassToTest");
System.out.println(test2 != null);
}
static class ClassToTest {
static {
System.out.println("Loading " + ClassToTest.class.getName());
}
static void reportLoaded() {
System.out.println("Loaded");
}
}
}

生产:

false
Loading TestLoaded$ClassToTest
Loaded
true

请注意,示例类不在包中。完整的binary name是必需的。

二进制名称的示例是 "java.security.KeyStore$Builder$FileBuilder$1"

关于java - 在Java中,是否可以知道一个类是否已经被加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/482633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com