私はリフレクションを使用してgettersを別のクラスのセッターにマッピングしています。つまり、stuts1が主にtext(Strings)を表示するためにフォームクラスを使用していて、特定の値を保持するバックエンドタイプ。私は現在ゲッターとセッターの間でマッピングができていましたが、これは簡単でしたが、混合タイプに問題があります。私はsetterのパラメータ型を使用して、期待されるものを見ているので、ゲッターからオブジェクトの型を判断し、予想される型にどのようにキャストする必要があります。反射を使用しているときに、未知の型をJavaでどのようにマップしてキャストできますか?
など。
HomePageForm -> HomePageData
Name="Alexei" -> String name; (Maps correctly)
Age="22" -> int age; (Needs casting from string to int and visa-vera in reverse)
次は、これまで事前に
/**
* Map the two given objects by reflecting the methods from the mapTo object and finding its setter methods. Then
* find the corresponding getter method in the mapFrom class and invoke them to obtain each attribute value.
* Finally invoke the setter method for the mapTo class to set the attribute value.
*
* @param mapFrom The object to map attribute values from
* @param mapTo The object to map attribute values to
*/
private void map(Object mapFrom, Object mapTo) {
Method [] methods = mapTo.getClass().getMethods();
for (Method methodTo : methods) {
if (isSetter(methodTo)) {
try {
//The attribute to map to setter from getter
String attName = methodTo.getName().substring(3);
//Find the corresponding getter method to retrieve the attribute value from
Method methodFrom = mapFrom.getClass().getMethod("get" + attName, new Class<?>[0]);
//If the methodFrom is a valid getter, set the attValue
if (isGetter(methodFrom)) {
//Invoke the getter to get the attribute to set
Object attValue = methodFrom.invoke(mapFrom, new Object[0]);
Class<?> fromType = attValue.getClass();
//Need to cast/parse type here
if (fromType != methodTo.getParameterTypes()[0]){
//!!Do something to case/parse type!!
} //if
//Invoke the setter to set the attribute value
methodTo.invoke(mapTo, attValue);
} //if
} catch (Exception e) {
Logger.getLogger(Constants.APP_LOGGER).fine("Exception in DataFormMappingService.map: "
+ "IllegalArgumentException" + e.getMessage());
continue;
}
} //if
} //for
} //map
おかげで、 アレクセイ・ブルー私のコードです。
Dozer(http://dozer.sourceforge.net/documentation/simpleproperty.html)は、この種のものを自動的に処理します。 – artbristol