如果我指定com.itextpdf.*
的子库,我可以编译我的程序,但由于某种原因,如果我只是import com.itextpdf.*
,我的编译就会失败。但是,就像我说的,如果我指定我正在使用的子库,例如
import com.itextpdf.text.Font.*;
import com.itextpdf.text.pdf.*;
一切都很好。在它失败的情况下,我得到的错误是“包com.itextpdf不存在”,但我知道它确实存在。我在构建路径中正确地包含它,并且Eclipse在任何情况下都不会给出任何编译错误。当我尝试使用Ant构建时,只会出现错误。
此时,我不介意指定我将使用的子库以确保我获得构建。但我很好奇,为什么Ant不允许这样做?
答案 0 :(得分:1)
您和Eclipse将java命名空间视为层次结构。但是,在Java规范中,它们不是。 “com.itextpdf.text”和“com.itextpdf.text.Font”之间没有任何关系。它们是不同的字符串,故事的结尾。
作为一种风格问题,您可能希望设置Eclipse以自动组织导入并显式指定您在类的导入部分中使用的每个类。当“com.itextpdf.text.Font.String”和“com.itextpdf.text.pdf.String”都存在时,这避免了歧义,但您只想引用其中一个。如果您使用emacs或vi进行编程,这种风格将非常繁琐且不方便,但使用Eclipse时,它是自动且不可见的,除非您滚动到文件的顶部。