staticインポート

staticメンバーにアクセスするには、そのメンバーのクラスで参照を修飾する必要があります。 たとえば次のようにしなければなりません。
 double r = Math.cos(Math.PI * theta); 
この状況を回避するため、staticメンバーをインタフェースに置いて、そのインタフェースから継承させることがあります。 しかし、これはよい方法ではありません。 実際、定数インタフェース・アンチパターンという名前があるほど悪い方法です。『Effective Java』の第17項を参照してください。 問題は、あるクラスによる別のクラスのstaticメンバーの使用が単なる実装の詳細になっているという点です。 クラスがインタフェースを実装すると、そのインタフェースはそのクラスの公開APIの一部となります。 実装の詳細は、公開APIとして公開するべきではありません。

staticインポート構造体により、staticメンバーを含む型から継承しなくても、staticメンバーに対する非修飾のアクセスが可能になります。 かわりに、プログラムがメンバーを個別に、またはまとめてインポートします。個別の例を次に示します。

 import static java.lang.Math.PI; 
まとめてインポートの例を次に示します。
 import static java.lang.Math.*; 
staticメンバーをインポートすると、修飾なしで使用できます。
 double r = cos(PI * theta); 
staticインポート宣言は、通常のインポート宣言と似ています。 通常のインポート宣言では、パッケージからクラスをインポートすることで、パッケージ修飾なしでクラスを使用できるようにします。一方、staticインポート宣言では、クラスからstaticメンバーをインポートすることで、クラス修飾なしでstaticメンバーを使用できるようにします。

staticインポートを使用しなければならないケースは、 ほとんどありません これを使用するのは、そうしないと定数のローカル・コピーを宣言してしまう場合や、継承を乱用してしまう場合(定数インタフェース・アンチパターン)だけです。 つまり、1つまたは2つのクラスからstaticメンバーに頻繁にアクセスする必要がある場合に使用してください。 staticインポートを使いすぎると、インポートしたすべてのstaticメンバーでプログラムの名前空間が煩雑になるため、プログラムが判読不可能になり、保守不可能になる可能性があります。 プログラムのコードを読んだ人は(プログラムの作成者が数か月後に読んだ場合でも)、staticメンバーがどのクラスに属していたのか理解できないでしょう。 すべての staticメンバーをクラスからインポートすると、特に可読性に悪影響があります。1つか2つしかメンバーを必要としない場合は、個別にインポートしてください。 staticインポートを適切に使用すれば、クラス名の繰返しを省くことができ、プログラムをより読みやすくすることも可能です。


Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.