为了完成一个项目,我需要改变一个命名包中的类文件。有什么办法可以强制Java从命名包中识别未命名包?
我不能把它放到未命名的包中;它是从其他类导入的。
我不能把所有的依赖放入命名包中,它们也被其他类所依赖。
我的目标是通过任何必要的手段强制javac
允许从未命名包中导入。这是不好的做法,但我别无选择。
或者,我会如何将所有导入的类放入一个包而不用重新编译它们,引用该包以编译目标类,然后在编译后删除那些引用?
为了完成一个项目,我需要改变一个命名包中的类文件。有什么办法可以强制Java从命名包中识别未命名包?
我不能把它放到未命名的包中;它是从其他类导入的。
我不能把所有的依赖放入命名包中,它们也被其他类所依赖。
我的目标是通过任何必要的手段强制javac
允许从未命名包中导入。这是不好的做法,但我别无选择。
或者,我会如何将所有导入的类放入一个包而不用重新编译它们,引用该包以编译目标类,然后在编译后删除那些引用?
我解决了这个问题。我编译了这个程序,它通过在命名包中导入所有类和方法的准系统定义,然后使用名为Classeditor的程序在编译后编辑包名/路径。
我相信有可能将未命名包中的类导入指定包中的类,直到java 1.4。但是,这不起作用了。
也就是说,如果你有两个类是这样的:
File A.java
import b.B; // <-- This is ok
class A {
...
}
File B.java
package b;
import A; // <-- Does not compile after 1.4
class B {
...
}
那么将有可能从类引用类B而不是其他方式。您不能从未命名包中导入类。
您可以尝试使用JDK 1.3编译您的类。他们仍将运行在JDK 1.4及更高版本中。
我怎么会去把所有的 导入的类成包 而无需重新编译他们
你不能,包名是类的全名和现在的一部分在类文件本身中。
您可以使用反射来访问这些类,这是一个丑陋的问题的丑陋解决方案。
*其中编译的类(因此反编译时)引用未命名包中的包,当允许时从后面引用包。 – Andrew
你为什么要强迫它?什么阻止你导入类? – biziclop
问题需要更清楚。 – jprete