2011-07-10 76 views
0

我已經編寫代碼來將對象轉換爲所需的類型。如果所需的類型是一個自定義類對象,並且它有另一個對象,我們需要遞歸地進行轉換。順便說一句:我會知道,如果輸入是一個哈希映射,我需要構造一個對象。如果在HashMap中,如果另一個HashMap存在,那麼我需要理解它在對象內部的對象。而內部對象我需要從內部hashMap構建。爲了構建它,我將遞歸地調用該方法。我在這裏描述的代碼。但是這兩個類Castor和MyBuilder都成了循環。我沒有得到如何打破它。如果方法不循環,我們可以打破依賴關係。但隨着週期可以幫助嗎? 我可以引入任何模式,或者我可以如何重構這個模式?如何在方法遞歸時重構以避免循環依賴?

在此先感謝。

代碼是這樣的: 對於循環更快地訪問PL是指:的returnValue castPrimitive(....和無效setParameterToEntity .....

MyBuilder myBuilder = new MyBuilder(); 

class Castor { 
public Object castToRequiredType(Type type, Object object) { 
    String typeString = type.toString(); 
    Object returnValue = null; 
    if (myUtils.isTypePrimitive(typeString)) { 
     returnValue = castPrimitive(object.toString(), typeString); 
    }else if { 
// some conditions and some casting logic. 
} 
else { 
     returnValue = myBuilder.buildCustomObject(this,typeString, object); 
    } 
    return returnValue; 
    } 
    // other methods which call castToRequiredType() recursively. 
} 


class MyBuilder{ 
buildCustomObject(Castor castor, 
      String classOfType, Object object){ 
    Class<?> loadedClass = myUtils.loadClass(classOfType); 

     instance = loadedClass.newInstance(); 
     HashMap<?, ?> myMap; 
     List<Method> declaredMethods = myUtils.getMethodsForClass(loadedClass); 
     for (Method method : declaredMethods) { 
      if (object instanceof HashMap<?, ?>) { 
       myMap = (HashMap<?, ?>) object; 
     // ITERATE THROUGH MAP AND CALL THE SET PARAMETER TO ENTITY METHOD. 
        } 
       } 
      } 
    return instance; 
} 

void setParameterToEntity(Castor caster, 
Object instance, Method method, Object value) { 
    ype[] parameterTypes = method.getGenericParameterTypes(); 
    Object castedValue = caster.castToRequiredType(
    parameterTypes[0], value);   
    } 

}}

回答

0

這部分犯罪嫌疑人似乎對我 - 你迭代的每個方法和針對每一個你正在調用setParameterToEntity

for (Method method : declaredMethods) { 
     if (object instanceof HashMap<?, ?>) { 
      myMap = (HashMap<?, ?>) object; 
    // ITERATE THROUGH MAP AND CALL THE SET PARAMETER TO ENTITY METHOD. 
  1. 你忽略了哈希映射的關鍵,只是在值傳遞(見setParameterToEntity SIG)

  2. 你傳入同一個對象中的每個和你正在構建的類中的每個方法。

我假設你的HashMap是二傳手的名字和相關的值的列表,所以你不應該被遍歷HashMap中鍵和每一個識別方法,然後調用該方法與價值散列圖作爲參數。爲了支持多個參數,你需要另一個hashmap。由於此代碼迭代hashmaps中的對象圖並生成另一個對象圖,因此只有hashmaps足夠聰明才能存儲對hashmap中其他元素的引用,或者在代碼中存在錯誤時才顯示循環a)傳入相同的對象而不是來自對象的元素(導致它旋轉),或者b)您有一個錯誤,您正在迭代正在構建的對象而不是散列圖。

考慮到上面的代碼片段,我認爲問題是:),所以迭代hashmap而不是聲明的方法,如上所述,並確保您傳遞方法(由hashmap鍵確定),並從散列映射到setParameterToEntity,而不是散列映射本身。

0

感謝@memetech:現在我將構建器邏輯放在腳輪中,併爲腳輪創建各種子類,以處理請求。

+0

如果memetech的答案是正確的,那麼您應該將他標記爲正確,而不是您自己。 – SJuan76

+0

我沒有說他的回答是正確的。我表示感謝您的幫助。謝謝你的評論SJuan :)如果你堅持,我會這麼做:) –