如何在Java中创建空包?

Dog*_*Dog 0 java compilation package

我有以下目录结构:

A.java
a
??? A.java
Run Code Online (Sandbox Code Playgroud)

A.java:

import a.*;

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

A/A.java:

package a;
public class A {}
Run Code Online (Sandbox Code Playgroud)

它编译并运行:

$ javac A.java && java A
Hello Human
Run Code Online (Sandbox Code Playgroud)

但是当我删除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
Run Code Online (Sandbox Code Playgroud)

为什么?

kup*_*fic 5

您可能会说包a不可观察:

当且仅当以下情况之一时,才能观察到包:

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

  • 可以观察到包的子包.

来源:包的可观察性