1

定数ファイルからキーと値のペアを読み取ろうとしています。クラス名とフィールド名を直接使用する場合は機能しますが、クラスとフィールドの組み合わせを動的に作成する場合は機能しません。この問題を交渉する方法は?

以下は私の定数ファイルです

Public interface Constants
{
String  DEV_SELECT_STATEMENT  =  “DEV_INT_SQL_SELECT_STATEMENT”
String  INT_SELECT_STATEMENT  =  “DEV_INT_SQL_SELECT_STATEMENT”
}

Query.propertiesファイル

DEV_INT_SQL_SELECT_STATEMENT =  “SELECT * FROM SOME TABLE”;

JAVAクラスファイル//これは機能します

public someClass
{
public someMethod()  //This works
     {
      String sqlStatement = QueryLoader.getStatement(Constants.DEV_SELECT_STATEMENT);
      System.out.println("The  key is :" + Constants. DEV_SELECT_STATEMENT);
      System.out.println(“SqlStatement is : “ + sqlStatement);
      }
}

キーは次のとおりです:DEV_INT_SQL_SELECT_STATEMENT

SqlStatementは:SELECT * FROM SOME TABLE

 public someClass  //This does not work
 {
public someMethod(String env)  //This does not work
     {
      String queryKey =  “Constants” +env + “_SELECT_STATEMENT “;
      System.out.println(“The Key is :  “ + queryKey);
      String sqlStatement = QueryLoader.getStatement(queryKey);
      System.out.println(“SqlStatement is : “ + sqlStatement);
     }

キーは:Constants.DEV_SELECT_STATEMENT //これは値ではなく、文字列を提供します

SqlStatementは:null

4

4 に答える 4

1

リフレクションを使用する:

String fieldName = env+"_SELECT_STATEMENT";

String value = String.valueOf(Constants.class.getField(fieldName).get(null));

編集:私はいくつかの違法なことをしたことに気づきました(Constants.class.getClass()は無効です)

私が編集したコードをどのようにテストしたか、そしてそれは機能します。

于 2012-05-09T16:25:28.130 に答える
0

はい..ステートメント内ではString sqlStatement = QueryLoader.getStatement(queryKey);、探している絶対値ではなく、querykeyの文字列値が渡されることはありません。

できるのにそれをするのは難しい。あなたがする必要があるのは、toStringメソッドをオーバーライドし、querykeyのtoStringが呼び出されたときに絶対値を返す方法を見つける必要があるということです!!

解決策:リフレクションを使用してください!!

于 2012-05-09T16:21:00.007 に答える
0

解決策は、OPが求めている質問に答えることではなく、問題を解決するための最も簡単な解決策である場合があります。

はい、Reflectionを使用できますが、問題を正しく理解している場合(質問はかなり混乱しますが..)、解決したい基本的な問題は<Key, Value>ファイルからペアを読み取ることです。最も簡単な解決策は、これに適切なデータ構造を使用することです。これはMap<String, String>です。ファイルからデータを読み取りたいので、これを自分で解析する必要はありません。Javaのプロパティがあります

于 2012-05-09T16:32:22.337 に答える
0

列挙を使用する可能性がありますenum

于 2012-05-09T16:47:47.953 に答える