- ベストアンサー
定数はどこでまとめますか?
今、複数のCSVファイルを開いて、文字検索を行い、 HTMLとして、結果を出力するというPG組んでいます。 CSVファイル名とかを定数としておくわけですが Cだとヘッダーファイルなりにまとめるとおもいますが、 javaの場合、このような定数はどのように管理するのが、一般的なんでしょうか? たとえば、 定数専用のインターフェースを作ってまとめるとか、定数専用のクラスを作るとかは思いついたのですが...。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
定数は、以下の3パターンになると思います。 (1)クラスAと関連が強く、かつ他のオブジェクトにも公開してよい場合 クラスAのフィールドとして、 public static final String FILE_NAME = "hoge.csv"; (2)クラスAと関連が強く、かつ他のオブジェクトには公開したくない場合 クラスAのフィールドとして、 private static final String FILE_NAME = "hoge.csv"; (3)パッケージ共通で使う「設定系の定数」 変数をまとめたクラスを作り、そこに下記を入れ込む。 public static final String FILE_NAME = "hoge.csv"; (このときコンストラクタを private にしておけば無駄に new されることもありません) あるいは、XML等の設定ファイルを設け、それをロードするクラスを作る。 Struts や EJB もそうですが、最近は設定系の定数はXML等に外出しにしておく傾向が強いです。そうしておくと、ユーザや開発者が動的に設定を変えることができるからです。 static final なフィールドを設けたときの注意点としては、 ・コンパイル時にインライン展開される(クラスファイルにベタで書かれる)可能性が高いので、変数内容変更時は 参照している全クラスを再コンパイルする必要があるかもしれない。 ・static final なフィールドはサブクラスでオーバライドできる。 以上、注意してください。また、 >JSPなどの場合、 HTMLで、色とか、サイズとかの指定を >簡単に全体でできるといいなぁとおもったんですが。 これは、通常スタイルシートで設定します。
その他の回答 (2)
- UKY
- ベストアンサー率50% (604/1207)
定数だけのためにプレースホルダとしてクラスやインタフェースを定義するのはあまりよろしくありません。(とは言っても、実際には使われていますが) 一般的には、その定数が最も深く関わりのあるクラスに、static かつ final (かつ普通は public) なフィールドとして定義します。 例えば、ファイル名を定数としておきたい場合は、ファイルの入出力を行うクラスのフィールドとして定義します。
お礼
ご回答ありがとうございます。 そうなんですよね... ただ、たとえば、 JSPなどの場合、 HTMLで、色とか、サイズとかの指定を 簡単に全体でできるといいなぁとおもったんですが。 でも、スーパークラスで指定しておけばいいのか... とかもおもいつつ。 普通どうなんだろ?とおもったしだいです。 ありがとうございました。
- sha-girl
- ベストアンサー率52% (430/816)
メンバとしてfinalで定義してやるのが一般的では? public class myclass{ final double PI = 3.141592; final String myname = "Jack"; ・ ・ ・ }
お礼
ご回答ありがとうございます。 #完全にとじるのわすれてました(笑) まあやっぱり設定ファイル(XML)を外に 持つのが普通ってことですね。 >これは、通常スタイルシートで設定します。 ごもっともです。