読者です 読者をやめる 読者になる 読者になる

No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

Javaのpackage, importではまった

すごく初歩的な部分で恥ずかしいのだが、Javaのpackage, import機構ではまったのでメモしておく。

packageでデフォルトパッケージになっているクラスは、他のクラスから呼び出すことができないみたいですね。

エラーになる例

フォルダ構成
/base
  |
  +---Main.java
  |
  +--/dir1
       |
       +---Test.java
Main.java
public class MainClass {
    public static void main(String[] args) {
        System.out.println("This is main Class.");
    }
}
Test.java
package dir1;

public class Test {
    public static void main(String[] args) {
        Main.main(null); // ←コンパイルエラー
    }
}

こんな感じの時に、Test側からMainを呼び出そうとすると、コンパイルエラーになってしまいます。
デフォルトパッケージをインポートする方法(?)があるなら動きそうなんですが、私はそんな方法知りません。

解決方法

結論から言うと、解決方法は要するにデフォルトパッケージを使わなければいいだけの話でした。

フォルダ構成 (rootを作った)
/base
  |
  +--/root
       |
       +---Main.java
       |
       +--/dir1
           |
            +---Test.java

Main.java (package rootを追加)

package root;

public class MainClass {
    public static void main(String[] args) {
        System.out.println("This is main Class.");
    }
}

Test.java (packageをroot.dir1に変更)

package root.dir1;

public class Test {
    public static void main(String[] args) {
        Main.main(null);
    }
}

こんな感じならOKでした。