少し疑問があります。実行時にオブジェクトを取得する方法はありますか?
このようなもの:私はEmployeeというクラスを持っていて、次のプロパティname、addrees、idを持っています
今、私は従業員のオブジェクトを持っていますが、特定の条件に応じてプロパティの 1 つを取得する必要があります。
したがって、実行時に emp.getName() または emp.getID() である可能性があります。
どうすればこれを達成できますか?
よろしく、アミット
少し疑問があります。実行時にオブジェクトを取得する方法はありますか?
このようなもの:私はEmployeeというクラスを持っていて、次のプロパティname、addrees、idを持っています
今、私は従業員のオブジェクトを持っていますが、特定の条件に応じてプロパティの 1 つを取得する必要があります。
したがって、実行時に emp.getName() または emp.getID() である可能性があります。
どうすればこれを達成できますか?
よろしく、アミット
オブジェクトが getter/setter 命名の JavaBeans 規則に準拠している場合、apache の beanutils ライブラリのPropertyUtils.getPropertyは、この質問で説明されているように、うまく機能するように見えます。
たとえば、次のようなことができます
String field = "name.lastname"; // or could be read dynamically from user input
Object value = PropertyUtils.getProperty(emp, field);
ネストされたプロパティを処理します。
試す
String str = (condition) ? emp.getName() : emp.getID();
また
final String str;
switch(userSelectedField) {
case "lastname": str = emp.getName().getLastName(); break;
case "zipcode": str = emp.getCountry().getState().getZipCode(); break;
default: /* report an error */
}
何百ものプロパティがある場合 (コメントで述べたように)、1 つのオプションは、それらすべてをMap<String, SomeType>
. アクセスは非常に簡単です。キーに String (または Enum) を渡します。主な欠点は、それらの値がすべて SomeType (おそらく実際には文字列) であり、その一部を整数、日付などにしたい場合があることです。その場合、いくつかのオプションがあります。
呼び出し元は、型と解析を知っている必要があります。たとえば、Map は日付を文字列 "01/23/1967" として格納します。呼び出し元は KEY_BIRTHDAY を日付に変換する必要があることを認識していますが、呼び出し元がこれを日付に変換するために使用するユーティリティ コードがあります。
または、Map は、おそらくMap<String, Class>
各値のクラスを持つ別の型を介して型を認識し、Map は変換を行います。