2011-02-23 17 views
0

为了完成一个项目,我需要改变一个命名包中的类文件。有什么办法可以强制Java从命名包中识别未命名包?

我不能把它放到未命名的包中;它是从其他类导入的。

我不能把所有的依赖放入命名包中,它们也被其他类所依赖。

我的目标是通过任何必要的手段强制javac允许从未命名包中导入。这是不好的做法,但我别无选择。

或者,我会如何将所有导入的类放入一个包而不用重新编译它们,引用该包以编译目标类,然后在编译后删除那些引用?

+0

*其中编译的类(因此反编译时)引用未命名包中的包,当允许时从后面引用包。 – Andrew

+0

你为什么要强迫它?什么阻止你导入类? – biziclop

+1

问题需要更清楚。 – jprete

回答

2

我解决了这个问题。我编译了这个程序,它通过在命名包中导入所有类和方法的准系统定义,然后使用名为Classeditor的程序在编译后编辑包名/路径。

0

我相信有可能将未命名包中的类导入指定包中的类,直到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及更高版本中。

+0

人们总是说“你不行”。但我仍然想要这样做。是否有任何可靠的开放源代码JDK,我可以改变它来取出那些令人讨厌的Java小功能? – Andrew

+0

@Andrew据我所知,你被赋予了一个完美可行的解决方案。 – biziclop

1

我怎么会去把所有的 导入的类成包 而无需重新编译他们

你不能,包名是类的全名和现在的一部分在类文件本身中。

您可以使用反射来访问这些类,这是一个丑陋的问题的丑陋解决方案。