オンデマンドインポートとは、import パッケージ名の後にアスタリスク(*)を付ける宣言文です。
例
import java.util.*;
import java.sql.*;
import javax.swing.*;
オンデマンドインポートは、同じパッケージで複数のクラスを用いる際、一行で記述できます。
その反面、デメリットが大きいです。
そのデメリットを紹介します。
その1:どのクラスを使っているか分かりづらい
まず、サンプルコードを見てください。
package site.climateinfo;
import java.util.*;
import java.sql.*;
public class Main{
public static void main(String[] args){
Timer time = new Timer();
}
}
上記のTimerクラスは、どのパッケージなのか、すぐ見ただけでは分かりません。
java.utilパッケージのクラスなのか、java.sqlパッケージのクラスなのか、はたまた同じパッケージクラスなのかわかりづらいです。
その2:異なるパッケージでも同名クラス
Timerクラスは、java.utilパッケージとjavax.swingパッケージに存在します。
では、下記のようにオンデマンドインポートでTimerクラスをインスタンス化するとどうなるでしょうか。
package site.climateinfo;
import java.util.*;
import javax.swing.*;
public class Main{
public static void main(String[] args){
Timer time = new Timer();
}
}
実行結果
error: reference to Timer is ambiguous
both class javax.swing.Timer in javax.swing and class java.util.Timer in java.util match
どちらのクラスを呼び出せばよいのか分からず、エラーになりました。
その3:自作パッケージを優先
自作パッケージ(site.climateinfo)に同名のクラスがあったらどうなるでしょうか。
自作パッケージにTimerクラスを作ってみます。
package site.climateinfo;
public class Timer{
//処理
}
その後、先ほどのコードを実行します。
すると、エラーになりません。
このことからオンデマンドインポートしたパッケージと自作パッケージ(site.climateinfo)に同名クラスがある場合、自作パッケージのクラスを優先することがわかります。
まとめ
オンデマンドインポートのデメリットについて紹介しました。
以上のデメリットからオンデマンドインポートより明示したインポートを利用することをお勧めします。
個人的にオンデマンドインポートは、単純なプログラムのみで使用するならいいと思います。