我想加载自己的java.lang.String
public class StringCustomClassFactory {
public static String newInstance() {
URLClassLoader tmp = new URLClassLoader(new URL[] {new URL("file:///home/.../target/classes/") }) {
public Class loadClass(String name) {
if ("java.lang.String".equals(name))
return findClass(name);
return super.loadClass(name);
//exception handling is omitted
}
};
return (String) tmp.loadClass("java.lang.String").newInstance();
//...
但我经常收到异常:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
如果您的类加载器,系统的安全性可能会受到影响 返回了自己的java.lang.SecurityManager值,但没有 和实际的一样检查。
你会建议我解决这个问题,它是否可以解决?
答案 0 :(得分:1)
您不能,也永远无法覆盖以java.
开头的包中的类;它与SecurityManager无关,而是在ClassLoader::preDefineClass
考虑到这意味着你所遵循的推理路线是非常错误的(tm);你能解释为什么需要这个吗?