0

如果我指定 的子库,我可以很好地编译我的程序com.itextpdf.*,但由于某种原因,如果我只是这样做,我的编译会失败import com.itextpdf.*。但是,就像我说的,如果我指定我正在使用的子库,例如

import com.itextpdf.text.Font.*;
import com.itextpdf.text.pdf.*;

一切都编译得很好。在它失败的情况下,我得到的错误是“包 com.itextpdf 不存在”,但我知道它确实存在。我将它正确地包含在构建路径中,并且 Eclipse 在任何情况下都不会给出任何编译错误。仅当我尝试使用 Ant 构建时才会出现该错误。

在这一点上,我不介意指定我将使用的子库来确保我得到一个构建。但我很好奇,为什么蚂蚁不允许这样做?

4

1 回答 1

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 中,它是自动的且不可见的,除非您滚动到文件的顶部。

于 2012-05-07T22:36:15.727 回答