4

200以上の静的フィールドを含む定数クラスがあるとしましょう:

class AnimalConstants {
  static final int AARDVARK = 1;
  static final int ANTELOPE = 2;
  static final int BEAR = 3;
  ...
  ...
  static final int ZEBRA = 200;
}
  • そのようなクラスを使用することでパフォーマンスとメモリに悪影響があるかどうかを誰かが説明できますか?
  • クラスがインターフェース(SwingConstantsなど)に変更され、一部のクラスによって実装された場合、それは良くなるのでしょうか、それとも悪くなるのでしょうか?
  • 定数をEnumクラスとして実装すると、良くなるのでしょうか、それとも悪くなるのでしょうか。
4

6 に答える 6

7

パフォーマンスやメモリに影響はないと思います。

それは、コードの可読性、定数を使用場所に近づけること、問題の基本的な理解などに関係していると思います。

私は、定数を使用場所の近くで宣言することを好みます。そうすれば理解しやすいと思います。

あなたが200以上と主張する実定数が本当に関連しているとしたら、私は驚きます。 もしそうなら、それらは一箇所に一緒に属します。そうでない場合は、それらをより小さな断片に分割し、それらが使用されている場所の近くで宣言する必要があると思います。

わかっていれば応答を変更する、あなたの考案した例よりも多くのコンテキストがあるに違いありません。

確かに、列挙型は素晴らしいです。しかし、最初に私の他のコメントを参照してください。

于 2013-01-10T10:15:07.877 に答える
2

もちろん、実装は定数enumの束よりも重くなりますが、以下を使用します。intenum

  1. 後で変更される可能性のある動物(あなたの場合)の実際の値をハードコーディングする必要はありません
  2. 動物の総数をハードコーディングする必要はなく、すべての動物を簡単に繰り返すことができます
  3. この列挙型のパラメーターを持つメソッドは正しく理解されます(foo(Animal animal)より良いfoo(int animal)
  4. 後で値に機能を追加できますenum。たとえば、内部値などです。isMammal
于 2013-01-10T10:13:49.103 に答える
2

クラスがインターフェース(SwingConstantsなど)に変更され、一部のクラスによって実装された場合、それは良くなるのでしょうか、それとも悪くなるのでしょうか?

->これは定数インターフェイスパターンになります。定数にインターフェースを使用し、それがすべてのクラスによって実装されているが、APIを開発している場合は、実装の詳細を公開しているようなものです。上記のwikiリンクはこれを非常によく説明しています。

どちらのアプローチ(インターフェイスまたはクラス)でも、finalクラスを使用し、定数を作成し、static import必要に応じて定数を実行することをお勧めします。

定数をEnumクラスとして実装すると、良くなるのでしょうか、それとも悪くなるのでしょうか。

->列挙型の場合、これが最善のアプローチです。

于 2013-01-10T10:18:33.760 に答える
2

すでに別のクラスにコンパイルされている値を変更するには、完全なビルドが必要になる場合があります。

補遺:javacのstatic final変数のインライン化を無効にすることは可能ですか?を参照してください。より徹底的な調査のために。

于 2013-01-10T10:18:43.203 に答える
1

はい、多数の定数を作成しても問題ありません。機能要件がないため、代替案がわからないため、悪影響について議論するのは困難です。

ただし、コンパイラは人間が書いたコードでうまく機能するように書かれているので安心してください。たくさんのフィールドがあることはおそらく大丈夫でしょう。

JDK7以降、スイッチケースで使用できる定数は、==と比較でき、変数名が参考になるので、非常に便利だと思います。

列挙型はさらに良くなることができますか?はい、できます。列挙型の機能を調べて、何か魅力的なものがあるかどうかを確認してください

于 2013-01-10T10:19:18.537 に答える
0

あなたの種類の変数(動物の種類)については、クラスの代わりに列挙子を使用することをお勧めします。使用している変数の数があれば、intプリミティブのみを使用しているため、パフォーマンスに問題はありません。この問題は、varがクラスであり、構造を維持するためにより多くのメモリを必要とする場合に発生します。私はあなたの疑問を明らかにしたいと思います(英語が下手でごめんなさい、私は少し錆びています)

于 2013-01-10T10:18:09.940 に答える