2011-07-10 75 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 :)如果你坚持,我会这么做:) –