2017-06-09 16 views
0

私は、戦闘、スキル・ポイントなどをハンドリングするロールプレイ・ママガーとして機能するボットを手に入れました。私は自分のコードを少し一般的にしています。ダイナミックな名前付きSQLフィールド

はので、私は

mainSPECIAL = rows[0].Strength; 

を呼び出すなど、彼らは異なるinitilizersを持っていますが、私は、ユーザーが特定のSTATの強さ、認識、敏捷性の最低を持っているかどうかを確認する必要が思わぬ障害に走ったと同じことを行います私はいつも行[0] .that属性、つまり行[0]を確認するつもりであれば、擦り傷は、強さ、percpetion、知性、運、天気予報です。 eadyは私のinitilizers

var PERKSPECIALName = "Strength"; 

に以前の設定しかし、私は

mainSPECIAL =行[0] .PERKSPECIALNameを呼び出すことはできませんが、右のことを行う方法があるはず?あなたはリフレクションを使用する必要がある。このために[0] .Strength

答えて

0

はそれが見たときに「行を[0] .PERKSPECIALNameは」それは「PERKSPECIALName」を検索し、その後、行の値を取り出すように:

Field f1 = rows[0].getClass().getField(PERKSPECIALName); 

Integer attribute = (Integer) f1.get(rows[0]); 

ここで、「整数」はオブジェクトから引っ張る要素のタイプ(強度のタイプ)です。

フィールドはpublicとして宣言する必要があります。私は彼らが公開されていないときにそれらを得る方法があると思うが、それはより多くのコードを必要とする。

+0

フィッティングされたf1でエラーが発生しました。 "F1は有効な識別子ではありません" 'フィールドf1 =行[0] .getClass()。getField(PERKSPECIALName); mainSPECIAL = rows [0] .f1; ' – NekoLLX

+0

f1はFieldインスタンスであり、それ以外は何もありません。あなたはあなたのタイプにそれを解析する必要があります。これをソリューションに追加します。 –

0

定数識別子で識別する必要がある整数のセットがあるようです。 EnumMapが役に立つかもしれません。 How to use enumMap in javaをご覧ください。

文字列を使用して参照するペルクを特定する場合は、マップを使用します。

Javaには他の言語のようにリファレンスがありません。したがって、データ構造を変更したくない場合は、ラムダ関数またはより重い言語機能を使用して再利用を増やしています。あなたがやろうとしていることを過度のように思う。

関連する問題