2013-04-02 28 views
0

我有以下目錄結構:如何在Java中創建空包?

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 

爲什麼?

+0

除去import語句,它會編譯 – prasanth

+0

要導入未聲明(目錄本身是不會自動包) – gordonk

回答

5

你可能會說,包a觀察到

包是可觀察的,當且僅當兩種:

  • 包含包的聲明的編譯單元是可觀察(第7.3節)。

  • 包的子包是可觀察的。

來源:Observability of a Package

3

這是你的問題在這裏:

import a。*;

它尋找的東西是不存在的,因爲這個包已經不存在。

取下A.java該行,它應該工作的罰款。

無法找到包的原因是因爲該文件夾內沒有編譯類,所以它不會被識別爲一個Java包。創建一個空包,如果你確實需要一個,將指定一個package-info.java文件,該文件通常用作包裝一個javadoc

一個選項。

+2

,我認爲他是個包明白這一點。我想他想知道爲什麼他必須這樣做,因爲'a'文件夾仍然存在**。 –

+0

感謝您指出@StephenC,我已經更新了一些答案,以便更好地理解這個問題。 –