Loading article…
静的インポートは、 Javaプログラミング言語で導入された機能で、コンテナクラス内でスコープが設定されているメンバー(フィールドとメソッド)をpublic static、フィールドが定義されているクラスを指定せずにJavaコードで使用できるようにします。この機能はバージョン5.0で導入されました。
この機能により、フィールドを最初に定義したクラスを参照することなく、定数をコードに含めるための型安全なメカニズムが提供されます。また、定数インターフェース(定数のみを定義するインターフェースを作成し、そのインターフェースを実装するクラスを作成するという、インターフェースの不適切な使用とみなされる方法)を作成する慣行を非推奨にするのに役立ちます。[ 1 ]
このメカニズムは、クラスの個々のメンバーを参照するために使用できます。
import static java.lang.Math.PI ; import static java.lang.Math.pow ;またはクラスのすべての静的メンバー:
import static java.lang.Math.* ;例えば、このクラス:
public class HelloWorld { public static void main ( String [] args ) { System . out . println ( "Hello World!" ); System . out . println ( "直径 5 cm の円を考えると、" ); System . out . println ( "円周は " + ( Math . PI * 5 ) + " cm" ); System . out . println ( "面積は " + ( Math . PI * Math . pow ( 2.5 , 2 )) + " 平方 cm" ); } }代わりに次のように書くこともできます。
import static java.lang.Math.* ; import static java.lang.System.out ;public class HelloWorld { public static void main ( String [] args ) { out . println ( "Hello World!" ); out . println ( "直径 5 cm の円を考えると、" ); out . println ( "円周は " + ( PI * 5 ) + " cm" ); out . println ( "面積は " + ( PI * pow ( 2.5 , 2 )) + " 平方 cm" ); } }同じ名前の静的メンバーが複数の異なるクラスからインポートされている場合、クラス名修飾がないため、コンパイラはどのメンバーを使用すべきかを判断できず、エラーが発生します。たとえば、次のコードはコンパイルに失敗します。
import static java.lang.Integer.* ; import static java.lang.Long.* ;public class HelloWorld { public static void main ( String [] args ) { System . out . println ( MAX_VALUE ); } }この場合、フィールドはとの両方の属性であるMAX_VALUEため、 は曖昧です。フィールドにクラス名をプレフィックスとして付けると、 が派生したクラスが明確になりますが、そうすると静的インポートの使用が不要になります。[ 2 ]MAX_VALUEjava.lang.Integerjava.lang.LongMAX_VALUE