向大大们请教一个问题,由于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;
}
}

解决方案 »

  1.   

    List list = (List)method.invoke(obj, new Object[] {});你方法里存的是什么类型?
      

  2.   

    我在网上查到有人说用List list = Arrays.asList(object);可我撞到list后发现list里还是只有一个对象,在调试的时候都能够看出来list里的对象还是个数组
      

  3.   


    我的这个方法用于执行下面两个getter,因此我不能固定写成short[]或float[]
    public short[] getId() { return fields; }
    public float[] getGrades() { return grades; }
      

  4.   

    (obj, new Object[] {}); 
    (methodStr, new Class[] {}); 
    这样的参数很有问题 new Object 每次new 一个写什么方法呢?
      

  5.   


    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));
    }