4

以前は、Java クラスで "import static" 構造をよく使用していました。最近、私は代わりに

import static my.pack.A.MY_CONSTANT;

あなたが使用することができます

import my.pack.A;

public class B {
    private static final MY_CONSTANT = A.MY_CONSTANT;
}

このアプローチの最も明白な利点は次のとおりです。

  1. Eclipse でリファクタリングを使用すると、静的インポートをいじることなく、コードからすべての長い定数式を簡単に取り除くことができますA.B.C.CONSTANT.ANOTHER_ONE.TOO_LONG(これは Eclipse で習得するのにそれほど迅速ではありません)。
  2. 任意の式に任意の名前を付けることができますが、現在のコンテキストではより意味のあるものになる可能性があります。

例えば:

private static final PAYMENT_TYPE = PaymentType.CASH;
...
calculateSomething(amount, PAYMENT_TYPE);

それ以外の

import static my.pack.PaymentType.CASH
...
calculateSomething(amount, CASH);

また、デフォルトの PaymentType 値が CREDIT_CARD に変更された場合、これはリファクタリングがより簡単になります。

私の質問は、静的インポートと比較してこのアプローチの欠点はありますか、それとも代わりにどこでも使用できますか?

今のところ私の唯一の懸念は、コンパイルされた結果の .class ファイルです。これは、説明されている 2 つのアプローチではおそらく異なるものです。そのため、理論的にはパフォーマンスとメモリ使用量が低下する可能性があります。

4

2 に答える 2

5

唯一の欠点は、ある定数を別の定数に割り当てるコードが増えることだと思います。それ以外には違いはないはずです。パフォーマンスとメモリは重要ではありません。同じ定数プール エントリへの参照が増える可能性があります。個別の定数プール エントリを作成したとしても、違いを生むには多くのエントリが必要です。

元のエントリの名前を変更できない場合、定数に適切な名前を付けることができることは非常に良いことです。

于 2013-01-29T13:51:00.677 に答える
3

ほとんどは好みの問題ですが、公式ドキュメントstaticでは、特にワイルドカードを使用して、このバージョンを控えめに使用することを推奨しています。静的インポートの主な欠点は、すべての静的メンバーを名前空間に追加することで名前空間を汚染することです。上記の例では、コードにとってより読みやすいと思われるものについて説明する必要があります。staticのすべてのメンバーが本当に必要でない限り、「パッケージをインポートする」という衝動に抵抗してくださいpackage

コンパイルされたコードに影響を与えるべきではありません。同じ定数への簡単なアクセスを提供するだけです。

于 2013-01-29T14:00:02.853 に答える