0

我已经编写了将对象转换为所需类型的代码。如果所需的类型是自定义类对象并且它有另一个对象,我们需要递归地转换它。顺便说一句:如果输入是 hashMap,我会知道我需要构造一个对象。如果在 HashMap 中,如果存在另一个 hashMap,那么我需要了解它的对象在对象中。我需要从内部 hashMap 构建内部对象。为了构建它,我将递归调用该方法。我在这里描述的代码。但是这 2 个类 Castor 和 MyBuilder 都变成了循环。我不知道如何打破它。如果方法不是循环的,我们可以打破依赖。但是对于循环,任何人都可以提供帮助吗?我可以引入任何模式或如何重构它?

提前致谢。

代码是这样的:为了更快地访问循环 pl,请参阅:returnValue castPrimitive( .... and void 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);          
   }

} }

4

1 回答 1

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 是一个 setter 名称和相关值的列表,所以你不应该迭代 hashmap 键并为每个键标识方法,然后使用 hashmap 中的值作为参数调用方法。要支持多个参数,您需要另一个哈希图。

由于此代码迭代哈希图中的对象图并生成另一个对象图,因此只有当哈希图足够聪明以存储对哈希图中其他元素的引用时才会出现循环,或者您在代码中有错误,例如 a) 传入相同的对象而不是对象中的元素(导致它旋转),或者 b)您有一个错误,您正在迭代正在构建的对象而不是 hashmap 图。

鉴于上面的代码片段,我认为问题出在这两个:),所以遍历 hashmap 而不是我上面所说的 declareMethods,并确保将 Method(由 hashmap 键确定)和值从 hashmap 传递给setParameterToEntity,而不是 hashmap 本身。

于 2011-07-10T14:06:38.117 回答