我有一个我正在导入的java类,不幸名为java.net_y。我的代码编译,但当我尝试运行它时,我得到:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.net_y
我已经阅读了其他关于尝试覆盖核心java类的线程,比如java.io .....这不是我正在做的....这个外部类我的名字很糟糕。
另一个提到反思的线程......不确定是否需要反射。
我该怎么办?
答案 0 :(得分:5)
我该怎么办?
重命名该课程。
答案 1 :(得分:2)
如果该类是从Web服务WSDL生成的,那么最好的方法是重新生成它并将包名强制转换为其他类。 大多数WSDL-to-java工具都有参数可以让你这样做。
答案 2 :(得分:0)
您可以使用Java Decompiler对要导入的内容进行反向工程,进行必要的更改,然后重新编译。
我实际上假设您正在尝试导入某种类型的.jar文件或类似的东西。如果您只导入一个类,那么您需要做的就是重命名它。
答案 3 :(得分:0)
我应该重命名你的班级。你不能把类放到java包中。参见
java.lang.ClassLoader#predefineClass()
这是一个执行以下检查的私有方法:
if ((name != null) && name.startsWith("java.")) {
throw new SecurityException("Prohibited package name: " +
name.substring(0, name.lastIndexOf('.')));
}
据我了解,这正是你看到的例外。
有时人们必须覆盖JDK中的类。这不是你的情况,但我想提一下以防万一。要做到这一点,你必须把这个重写的类放到
-Xbootclasspath
而非常规
-classpath
运行JVM时