猿问

java反射调用时如果返回值是整型数组怎么处理?

想通过java的反射功能将javaBean转换成map:


    public static Map<String, String> toMap(Object javaBean) {


        Map<String, String> result = new HashMap<>();

        Method[] methods = javaBean.getClass().getDeclaredMethods();


        for (Method method : methods) {

            try {

                if (method.getName().startsWith("get")) {

                    String field = method.getName();

                    field = field.substring(field.indexOf("get") + 3);

                    field = field.toLowerCase().charAt(0) + field.substring(1);


                    Object value = method.invoke(javaBean, (Object[]) null);

                    String val = "";

                    if (value != null) {

                        if (value.getClass().isArray()) {

                            Object[] array = (Object[]) value;

                            val = "[";

                            boolean flag = true;

                            for (Object o : array) {

                                if (flag) {

                                    flag = false;

                                    val += o.toString();

                                } else {

                                    val += ", " + o.toString();

                                }

                            }

                            val += "]";

                        } else {

                            val = value.toString();

                        }

                        result.put(field, val);

                    }

                }

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

        return result;

如果javabean中有整型数组的话,以上程序就无法正常使用了,比如如下的javabean:


public class Student {


    private int id;

    private String name;

    private String desc;

    private String[] phones;

    private List<String> addresses;

    private int[] scores;

    

    //getter and setter ...

其中对scores的转换会遇到问题:


java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;

请问我该如何处理原始类型的数组?


互换的青春
浏览 501回答 1
1回答

慕标琳琳

要用 java.lang.reflect.Array 来处理数组,所以我把 if (value.getClass().isArray()) 那一代码给你改了if (value.getClass().isArray()) {&nbsp; &nbsp; int length = Array.getLength(value);&nbsp; &nbsp; System.out.println(length);&nbsp; &nbsp; StringBuffer buffer = new StringBuffer();&nbsp; &nbsp; buffer.append('[');&nbsp; &nbsp; for (int i = 0; i < length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; Object v = Array.get(value, i).toString();&nbsp; &nbsp; &nbsp; &nbsp; buffer.append(v == null ? "<null>" : v.toString())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append(", ");&nbsp; &nbsp; }&nbsp; &nbsp; if (buffer.length() > 1) {&nbsp; &nbsp; &nbsp; &nbsp; // 大于 1 说明除了 '[' 外还有其它的,即数据不为空&nbsp; &nbsp; &nbsp; &nbsp; buffer.delete(buffer.length() - 2, buffer.length());&nbsp; &nbsp; }&nbsp; &nbsp; buffer.append(']');&nbsp; &nbsp; val = buffer.toString();&nbsp; &nbsp; System.out.println(val);}
随时随地看视频慕课网APP

相关分类

Java
我要回答