static のインポート |
Language の目次
|
この状況を回避するため、static メンバをインタフェースに置いて、そのインタフェースから継承させることがあります。しかし、これは良い方法ではありません。実際、「Constant Interface Antipattern (不変のインタフェースアンチパターン)」であると以前から指摘され続けています。「Effective Java」の第 17 項を参照してください。問題は、クラスが別のクラスの static メンバを使用するのは、実装のほんのわずかな部分だということです。クラスがインタフェースを実装すると、そのインタフェースはそのクラスの公開 API の一部となります。実装の詳細は、公開 API として公開するべきではありません。double r = Math.cos(Math.PI * theta);
static のインポート構造により、static メンバを含む型から継承しなくても、static メンバに対する非修飾のアクセスが可能になります。代わりに、プログラムがメンバを個別に、またはまとめてインポートします。個別の例を以下に示します。
まとめてインポートの例を以下に示します。import static java.lang.Math.PI;
static メンバをインポートすると、修飾なしで使用できます。import static java.lang.Math.*;
static のインポート宣言は、通常のインポート宣言と似ています。通常のインポート宣言では、パッケージからクラスをインポートすることで、パッケージ修飾なしでクラスを使用できるようにします。一方、static のインポート宣言では、クラスから static メンバをインポートすることで、クラス修飾なしで static メンバを使用できるようにします。double r = cos(PI * theta);
static インポートを使用しなければならないケースは、ほとんどありません。static インポートを使用するのは、そうしないと定数のローカルコピーを宣言してしまう場合や、継承を不正に使用してしまう場合 (Constant Interface Antipattern) だけです。つまり、1 つまたは 2 つのクラスから static メンバに頻繁にアクセスする必要がある場合に使用してください。static のインポートを使いすぎると、インポートしたすべての static メンバでプログラムの名前空間が煩雑になるため、プログラムが判読不可能になり、保守不可能になる可能性があります。プログラムのコードを読んだ人は (プログラムの作成者が数か月後に読んだ場合でも)、static メンバがどのクラスに属していたのか理解できないでしょう。すべての static メンバをクラスからインポートすると、可読性に明らかな影響があります。1 つか 2 つしかメンバを必要としない場合は、個別にインポートしてください。static のインポートを適切に使用すれば、クラス名を繰り返す定形句を省くことができ、プログラムをより読みやすくすることも可能です。
Copyright © 2004 Sun Microsystems, Inc.All Rights Reserved. |
Java ソフトウェア |