私はこれを行うことができますが、多分ここで何か他のことをするべきだと思います。
public static <T> T fromJson(String json, Class<T> clzz)
{
return (T) new Gson().fromJson(obj, targetClass);
}
効用関数を記述して、あなたはとても
PhoneNumber data = fromJson(obj, PhoneNumber.class);
これ以上の変換のようにそれを呼び出すことができます。
EDIT:「オブジェクト」を使用すると、あなたはここで反射
public void setIdOnObject(Object obj, Object id)
{
try{
Method m = obj.getClass().getMethod("setId",id.getClass());
m.invoke(obj, id);
}catch(NoSuchMethodException e){ return false; } catch (InvocationTargetException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (IllegalAccessException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
を使用することができ制約である場合には、単にコピー&ペースト・ランを、私が持っている実施例です。
import java.lang.reflect.InvocationTargetException;
public class Reflection
{
public static void main(String[] args)
{
MyParent p = new MyParent();
setParentKey(p, "parentKey");
MyObj o = new MyObj();
setParentKey(o, "myParentKey");
setMyKey(o, "myKey");
System.out.println("p = " + p);
System.out.println("o = " + o);
}
public static void invokeMethod(Object p, Object k, String methodName)
{
try
{
p.getClass().getMethod(methodName, k.getClass()).invoke(p, k);
}
catch (NoSuchMethodException e)
{
e.printStackTrace();
}
catch (InvocationTargetException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
public static void setParentKey(Object p, Object k)
{
invokeMethod(p,k,"setParentKey");
}
public static void setMyKey(Object p, Object k)
{
invokeMethod(p,k,"setMyKey");
}
public static class MyParent
{
private Object parentKey;
public void setParentKey(String k)
{
parentKey = k;
}
@Override
public String toString()
{
return "MyParent{" +
"parentKey=" + parentKey +
'}';
}
}
public static class MyObj extends MyParent
{
private Object myKey;
public void setMyKey(String k)
{
myKey = k;
}
@Override
public String toString()
{
return "MyObj{" +
"myKey=" + myKey +
"} " + super.toString();
}
}
}
と予想される出力は次のようになります。あなたは(あなたが言及したように)「複数のBeanタイプ」と「彼らはすべてのidプロパティを持っている」がある場合は、なぜあなたは定義されていない
p = MyParent{parentKey=parentKey}
o = MyObj{myKey=myKey} MyParent{parentKey=myParentKey}
私はオブジェクトをその型で呼び出す必要はありません。私はこのクラスにアクセスする複数のBean型を持ち、まったく同じことをします。それらはすべてidプロパティを持っているので、クラスにアクセスするすべてのオブジェクトにキーを設定しても安全です。しかし、その利用可能性を確認するためのチェックがうまくいくでしょう。 – ryandlf
私はクラスを知っているので、プロパティをチェックする良い方法のように見えます。 Bean型をキャストせずにオブジェクトのキーを設定するのはどうでしょうか? – ryandlf
あなたのニーズに合わせて編集を変更しました。何も変換する必要はありません。メソッドがあるかどうかをチェックし、メソッドを呼び出す。 –