質問

すべての文字列リテラルを解析および抽出し、古いJava定数を再生するようにファイルに入れる必要があるソースファイルがかなり多数あります。
例:

Label l = new Label("Cat");

なる:

Label l = new Label(Constants.CAT);

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

public final static String CAT = "Cat";

文字列をプロパティテキストファイルで外部化したくない。
1つの理由は、一貫性とコードの可読性のためです。
もう1つは、クライアントコードが GWT を使用していることです。これはJavaプロパティテキストファイルメカニズムをサポートしていません。

ある種のパーサーを書くことができます(おそらくant replaceタスクを使用)?
しかし、 IDE がすでにこの種のことを自動的に実行しているかどうか疑問に思いました。

役に立ちましたか?

解決

Peter Kelleyの回答を完了するには、Eclipse IDEの AST ソリューションを検討することをお勧めします。

その後、ソースコードを解析して必要な処理を行うASTプログラムを作成できます。

完全な例は、この eclipse cornerで入手できます。 eclipseヘルプ
また、セクション5のリスト"インプレースの実装翻訳" GitHubプロジェクトの複数の例

他のヒント

Eclipseはこれを自動的に行います。ファイルを右クリックし、「ソース」を選択してから、「文字列を外部化」

を選択します

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

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

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

実行する必要があるのは、実行時にそれらを読み込むのではなく、(別個のクラスの)組み込み文字列を使用するようにAccessorクラスを変更することです。

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

Pax Diabloが言ったことを完全に認めます。この関数も使用しています。

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

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

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

NetBeansの Jackpotソース変換エンジンをチェックアウトすると、スクリプトを作成できます。ソース変換。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top