【问题标题】:How to create the empty package in Java?如何在 Java 中创建空包?
【发布时间】:2013-03-23 20:31:42
【问题描述】:

我的目录结构如下:

A.java
a
└── A.java

A.java:

import a.*;

class A {
    public static void main(String[] args) {
        System.out.println("Hello Human");
    }
}

a/A.java:

package a;
public class A {}

它会编译并运行:

$ javac A.java && java A
Hello Human

但是当我删除a/A.java(但保留文件夹a)时,我无法再编译它:

$ rm a/A.java 
$ javac A.java && java A
A.java:1: package a does not exist
import a.*;
^
1 error

为什么?

【问题讨论】:

  • 删除该导入语句,它将编译
  • 您正在导入未声明的包(目录本身不会自动成为包)

标签: java compilation package


【解决方案1】:

你可能会说包a 不是可观察的

一个包是可观察的当且仅当:

  • 包含包声明的编译单元是可观察的(第 7.3 节)。

  • 包的子包是可观察的。

来源:Observability of a Package

【讨论】:

    【解决方案2】:

    这是你的问题:

    导入 a.*;

    它正在寻找不存在的东西,因为那个包已经不存在了。

    从 A.java 中删除该行,它应该可以正常工作。

    找不到包的原因是文件夹中没有可编译的类,所以不能识别为java包。

    创建一个空包的一个选项,如果你确实需要一个,是指定一个 package-info.java 文件,它通常用作包的 javadoc。

    【讨论】:

    • 我想他明白这一点。我想他想知道为什么他必须这样做鉴于“a”文件夹仍然存在
    • 感谢@StephenC 指出这一点,我已经稍微更新了我的答案,以便更符合问题的精神。
    猜你喜欢
    • 2012-06-04
    • 2017-07-04
    • 2010-12-13
    • 2017-05-14
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多