文字列を受け取る関数の呼び出しが多数あるJava EEプロジェクトがあり、この文字列は、必ずしも同じファイルで定義されているとは限らない定数に格納されており、別の定数クラスで定義されている場合があります。プロジェクト内のすべてのクラスを調べて、それらの定数の値を取得する必要があります。これを行うための賢明な方法は何ですか?リフレクションを使用して、プロジェクト内のすべてのクラス (数百) をロードすることを考えましたが、これが最善の方法であるかどうかはわかりません。
前もって感謝します。
文字列を受け取る関数の呼び出しが多数あるJava EEプロジェクトがあり、この文字列は、必ずしも同じファイルで定義されているとは限らない定数に格納されており、別の定数クラスで定義されている場合があります。プロジェクト内のすべてのクラスを調べて、それらの定数の値を取得する必要があります。これを行うための賢明な方法は何ですか?リフレクションを使用して、プロジェクト内のすべてのクラス (数百) をロードすることを考えましたが、これが最善の方法であるかどうかはわかりません。
前もって感謝します。
完全に理解しているかどうかはわかりませんが、定数の場所とその名前がわかっているという事実に基づいて、すべての定数クラスを静的にインポートし、値を使用して必要な操作を行うことができます。
public class Constants1 {
public static final String A = "A";
public static final String B = "B";
}
public class Constants12 {
public static final String C = "C";
}
定数をインポートします。
import static constants.Constants1.*;
import static constants.Constants2.*;
public class ConstantsProcessor {
static String[] constants = {A,B,C};
}
プロジェクト内のすべてのクラスを調べて、それらの定数の値を取得する必要があります。
これを行う必要はほとんどありません。作成する文字列equals()
は既存の定数に対するものであり、同じオブジェクトである必要があると想定しないでください。==
これは悪い習慣なので、文字列には使用しないでください。
しかし、文字通り質問に答えるために、String.intern()
これを呼び出すと、既存の文字列定数の文字列参照が得られます。(または、まだそのように定義されていない場合は同じ参照)
定数の名前はすべて知っていて、それらは 1 つのクラス (定数クラス) にあるため、そのクラスを使用することをお勧めします。定数がすべて 1 つのクラスにある場合は、他のすべてのクラスを調べる必要はありません。
できることは、パラメーターを定数名と同じに設定し、リフレクションを使用して定数クラス (およびそのクラスのみ) を調べて、パラメーターに一致する名前を持つすべての定数の値を取得することです。