12

すべての文字列リテラルを解析して抽出し、play old java 定数としてファイルに入れる必要があるかなり多数のソース ファイルがあります。
例えば:

Label l = new Label("Cat");

次のようになります。

Label l = new Label(Constants.CAT);

そして、Constants.java私は次のようになります:

public final static String CAT = "Cat";

文字列をプロパティ テキスト ファイルに外部化する必要はありません。
理由の 1 つは、一貫性とコードの読みやすさです。
もう 1 つは、クライアント コードがGWTJava プロパティ テキスト ファイル メカニズムをサポートしない を使用していることです。

ある種のパーサーを作成できますか (おそらく ant replace タスクを使用します)? しかし、すでにこの種のことを自動的に行っている
のだろうかと思いました。IDE

4

5 に答える 5

21

Eclipse はこれを自動的に行います。ファイルを右クリックし、[ソース]、[文字列の外部化] の順に選択します。

これは、(Constants.java ファイルに文字列を文字列として格納する) 要求どおりにはなりませんが、使用される方法は非常に強力です。ロケールに応じて動的にロードできるプロパティ ファイルにそれらを移動します。あなたが提案するようにそれらを別のJavaソースファイルに入れるということは、アプリケーションに一度にすべての言語を含めるか、ロケールに応じて異なるアプリケーションを出荷することを意味します。

基本的なものでさえ英語と日本語で出荷する必要があるアプリケーションに使用しています - より複雑なアプリケーションは 12 の言語で出荷されます - 私たちは決して小さなソフトウェア開発会社ではありません :-)。

それらをJavaファイルに入れたい場合は、すでに述べた欠点にもかかわらず、自由形式のJavaソースから文字列を抽出しようとするよりも、プロパティファイルをJavaソースファイルにモーフィングするプログラムを書く方がはるかに簡単です。

あとは、実行時にロードするのではなく、(別のクラスにある) 組み込みの文字列を使用するように Accessor クラスを変更するだけです。

于 2008-10-02T00:42:05.757 に答える
9

Peter Kelleyの回答を完成させるために、EclipseIDEのASTソリューションを検討することをお勧めします。

次に、ソースコードを解析して必要な処理を実行するASTプログラムを作成できます。

完全な例は、この日食コーナーの記事で入手できます。また、日食ヘルプで詳細を確認できます。また、Eclipse JDTでのドメイン固有言語の埋め込みの自動化のセクション「インプレース翻訳の実装」のリスト5に、GitHubプロジェクトの複数の例とともに
いくつかの例を見つけることができます。

于 2008-10-02T06:50:55.153 に答える
1

これをしたくない理由がいくつかあります。そのような生成されたファイル (Eclipse 関数については知りませんでした) は、たとえば、テスト クラスのコンストラクター引数として設定している文字列と、実際に必要なものとして設定している文字列を区別しないという事実は別として定数の場合、より大きな問題は、すべての public static final がクラスにコンパイルされることです。クラスの動作を変更したい場合は、定数を保持するクラスだけでなく、それを参照するすべてのものを変更する必要があります。

于 2008-10-02T02:27:13.150 に答える
1

パックス・ディアブロが言ったことを完全に認めます。私たちもその機能を使っています。

クラス ファイルに適用すると、関数「Externalize strings」によって、クラス Messages.class とプロパティ ファイル messages.properties の 2 つのファイルが作成されます。次に、文字列リテラルのすべての直接使用を Messages.get(String key) の呼び出しにリダイレクトし、「Ext. String」ウィザードで文字列に入力したキーを使用します。

ところで: プロパティ ファイルの何が悪いのでしょうか? 彼が言ったように、テキストを変更する必要がある場合は、プロパティ ファイルを変更するだけでよく、クラスを変更する必要はありません。

もう 1 つの利点は次のとおりです。文字列リテラルをプロパティ ファイルに抽出する方法により、コードを変更することなく、ソース言語を任意の言語に自由に翻訳できます。プロパティ ファイル ローダーは、対応するファイルと言語 iso コードを使用して、ターゲット言語ファイルを自動的に読み込みます。したがって、コードが実行されるプラットフォームについて心配する必要はありません。適切な言語が (ほぼ) 自動的に選択されます。これがどのように機能するかについては、クラスResourceBundleのドキュメントを参照してください。

于 2008-10-02T05:13:01.223 に答える
0

ソース変換のスクリプト作成を可能にする NetBeansのJackpot ソース変換エンジンを確認することをお勧めします。

于 2008-10-02T05:28:03.573 に答える