【发布时间】:2011-03-13 11:55:54
【问题描述】:
我从休眠查询中获取对象。然后我有字段列表,我必须在这个对象上调用它们的吸气剂。因此,在我调用这些 getter(不取决于我,所以我不知道它们返回什么)之后,我将这些对象放在一个数组 Object[] 中。现在我正在遍历这些对象,其中一些又是包含其他对象的集合。 所以我检查对象是否是这样的集合
private static boolean isCollection(Object obj){
Class clazz = obj.getClass();
return Collection.class.isAssignableFrom(clazz) ||
Map.class.isAssignableFrom(clazz);
}
现在我需要做一些类似的事情:
if(isCollection(object)){
get subobjects from this collection();
getDeclaredMethods of this type of object();
do something with everyObject();
}
感谢有关如何使其通用的所有帮助。哦,是的,这个方法是检查一个地图,但在我的情况下,一般来说,地图不能返回,只能返回集合和列表。
谢谢
编辑:如果不清楚,我将在此处添加确切的代码以供参考
Object[] objectRow = parseObject(hibernateObject);
for(Object field: objectRow){
get subobjects from this collection();
getDeclaredMethods of this type of object();
do something with everyObject();
}
public Object[] parseObject(Object mainObject) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
rowToReturn = new Object[fieldObjects.size()];
Method[] allMethods = mainObject.getClass().getMethods();
Method[] getters = findGetters(allMethods);
cutGetters(getters); // builds map so that we match getters with fields
for(FieldObject field: fieldObjects){
if(getterNameMethodMap.containsKey(field.getFinalFieldName())){
Method methodToInvoke = getterNameMethodMap.get(field.getFinalFieldName());
Object invokedObject = methodToInvoke.invoke(mainObject, (Object) null);
rowToReturn[field.getOrder()] = invokedObject; // put what ever it is that we got, into the final array
}
}
return rowToReturn;
}
private void cutGetters(Method[] getters){
getterNameMethodMap = new HashMap<String, Method>();
for(Method getter:getters){
String stringToGet = getter.getName().substring(4,getter.getName().length());
getterNameMethodMap.put(stringToGet, getter);
}
【问题讨论】:
-
你真的需要一个包含“非集合”对象和其他集合的集合吗?拥有一个包含来自不同类层次结构的对象的集合很少是一个好的决定。
-
@stoupa:我正在从休眠查询中获取一个对象。在那个对象上,我必须调用一些 getter 方法,无论它们返回什么,我都必须放在这个列表中......目前我不知道如何将它们分开,因为我永远不知道我会得到什么,可以是任何东西: /
-
@Julia:如果我理解正确,您将从不同的 getter 方法(具有不同的返回类型)返回的结果添加到上面提到的一个集合中。对吗?
-
@stoupa 是的。我从休眠查询中获取对象。然后我有字段列表,我必须调用它们的吸气剂。所以在我调用这些getter(不取决于我,所以我不知道它们返回什么)之后,我将这些对象放在一个列表中。然后我必须做我上面解释过的我必须做的事情:)
-
@Julia:您能否发布您正在描述的代码部分?
标签: java generics collections