我编写了将对象强制转换为所需类型的代码。如果所需类型是自定义类对象并且它有另一个对象,我们需要递归地转换它。顺便说一句:我知道如果输入是一个hashMap,我需要构造一个对象。如果在HashMap的旁边,如果有另一个hashMap,那么我需要了解它在对象中的对象。在内部对象中,我需要从内部hashMap构建。为了构建它,我将以递归方式调用该方法。我在这里描述的代码。但是这两个类Castor和MyBuilder都已成为循环。我没有得到如何打破它。如果该方法不是循环的,我们可以破坏依赖性。但循环可以任何一个帮助? 我可以介绍任何模式或如何重构这个模式?
提前致谢。
代码是这样的: 为了更快地访问循环pl,请参考:returnValue castPrimitive(....和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);
}
} }
答案 0 :(得分:0)
这部分似乎对我很怀疑 - 你正在迭代每个方法,并且每个方法都在调用setParameterToEntity
for (Method method : declaredMethods) {
if (object instanceof HashMap<?, ?>) {
myMap = (HashMap<?, ?>) object;
// ITERATE THROUGH MAP AND CALL THE SET PARAMETER TO ENTITY METHOD.
您忽略了哈希映射中的键,只是传递了值(请参阅setParameterToEntity sig)
您将同一个对象传递给您正在构建的类中的每个方法。
我假设你的hashmap是一个setter名称和相关值的列表,所以不应该迭代hashmap键,并且每个键都标识Method,然后使用hashmap中的值调用Method作为参数。要支持多个参数,您需要另一个hashmap。
由于此代码在散列图中迭代对象图并生成另一个对象图,因此仅当散列图足够聪明以存储对散列图中其他元素的引用,或者您在代码中有错误时,才会出现循环。 )传递相同的对象而不是来自对象的元素(导致它旋转),或者b)你有一个错误,你正在迭代正在构建的对象而不是hashmap图。
鉴于上面的代码片段,我认为问题都是:),所以如上所述迭代hashmap而不是declaredMethods,并确保你传递方法(从hashmap键确定),以及来自hashmap到setParameterToEntity,而不是hashmap本身。
答案 1 :(得分:0)
谢谢@memetech:现在我将构建器逻辑放在自带的脚轮中,并为脚轮创建各种子类来处理请求。