如何把method.invoke后的返回值转成数组或集合类型?

cquyuyan 2009-05-15 10:01:11
向大大们请教一个问题,由于method.invoke(obj, new Object[] {})返回的是一个Object类型,当反射执行一个反射回数组的gettter方法后如何把method.invoke(obj, new Object[] {})得到的value转成数组或其它集合类型以便能够再取出里面的某一个成员呢,要求不使用特定类型的某一确定类型[] 进行强制转化。


下面是我写的一个方法,用于执行一个对象的某一getter方法,我的期望是如果getter方法返回的是数组,最终返回数组里的第一个对象,如果现在的 method.invoke(obj, new Object[] {});不能够实现的话,有没有其他的反射用法能够得到方法数组形式的返回值?
private static Object getFieldValueByFieldName(String fieldName,Object obj) {
try {
String Letter = fieldName.substring(0, 1).toUpperCase();
String methodStr = "get" + Letter + fieldName.substring(1);
Method method = obj.getClass().getMethod(methodStr, new Class[] {});
Object value = method.invoke(obj, new Object[] {});
//我希望能完成如下功能的类型转化,但不是使用固定的像int[] 类型的转化,直接写成Object[] val=(Object[])value又抛异常
int[] val=(int[])value;
return val[0];
} catch (Exception e) {
return null;
}
}

...全文
1766 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2009-05-16
  • 打赏
  • 举报
回复

Object array = method.invoke(obj, new Object[]{});
int length = java.lang.reflect.Array.getLength(array);
List<Object> list = new ArrayList<Object>();
for (int i=0; i<length; i++) {
list.add(java.lang.reflect.Array.get(array, i));
}
xnjnmn 2009-05-16
  • 打赏
  • 举报
回复
(obj, new Object[] {});
(methodStr, new Class[] {});
这样的参数很有问题 new Object 每次new 一个写什么方法呢?
cquyuyan 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wcwtitxu 的回复:]
Java code
Object array = method.invoke(obj, new Object[]{});
int length = java.lang.reflect.Array.getLength(array);
List<Object> list = new ArrayList<Object>();
for (int i=0; i<length; i++) {
list.add(java.lang.reflect.Array.get(array, i));
}
[/Quote]


就是这样
zhaodalong 2009-05-15
  • 打赏
  • 举报
回复
友情 up !
cquyuyan 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cjdxhc 的回复:]
List list = (List)method.invoke(obj, new Object[] {});

你方法里存的是什么类型?
[/Quote]

这个转化当方法执行后的返回值是数组的时候还是通不过,出异常
cquyuyan 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cjdxhc 的回复:]
List list = (List)method.invoke(obj, new Object[] {});

你方法里存的是什么类型?
[/Quote]

我的这个方法用于执行下面两个getter,因此我不能固定写成short[]或float[]
public short[] getId() { return fields; }
public float[] getGrades() { return grades; }
cquyuyan 2009-05-15
  • 打赏
  • 举报
回复
我在网上查到有人说用List list = Arrays.asList(object);可我撞到list后发现list里还是只有一个对象,在调试的时候都能够看出来list里的对象还是个数组
cjdxhc 2009-05-15
  • 打赏
  • 举报
回复
List list = (List)method.invoke(obj, new Object[] {});

你方法里存的是什么类型?

62,633

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧