java反射调用时如果返回值是整型数组怎么处理?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2016-03-11 18:32:59 2315 1

想通过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;
请问我该如何处理原始类型的数组?

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:59:50

    要用 java.lang.reflect.Array 来处理数组,所以我把 if (value.getClass().isArray()) 那一代码给你改了

    if (value.getClass().isArray()) {
        int length = Array.getLength(value);
        System.out.println(length);
        StringBuffer buffer = new StringBuffer();
        buffer.append('[');
        for (int i = 0; i < length; i++) {
            Object v = Array.get(value, i).toString();
            buffer.append(v == null ? "<null>" : v.toString())
                .append(", ");
        }
        if (buffer.length() > 1) {
            // 大于 1 说明除了 '[' 外还有其它的,即数据不为空
            buffer.delete(buffer.length() - 2, buffer.length());
        }
        buffer.append(']');
        val = buffer.toString();
        System.out.println(val);
    }
    0 0
相关问答

1

回答

JAVA中什么情况下会使用数组呢?

2022-04-02 15:58:46 496浏览量 回答数 1

0

回答

请问java性能问题:如何优化向HashMap插入元素的速度?

2021-11-12 17:18:18 126浏览量 回答数 0

0

回答

请问java中使用BigDecimal计算操作性能最优的做法是什么?

2021-11-07 15:42:19 198浏览量 回答数 0

1

回答

java性能问题:有没有比较字符串是否相等的最快方法?

2021-11-06 16:21:40 153浏览量 回答数 1

0

回答

您好java性能问题:有没有比较字符串是否相等的最快方法?

2021-11-07 00:39:14 132浏览量 回答数 0

1

回答

java性能问题:如何优化向HashMap插入元素的速度?

2021-11-06 15:41:34 200浏览量 回答数 1

0

回答

请问java中常用的性能调优诊断工具都有哪些,请帮忙提供一下?

2021-11-06 22:35:44 78浏览量 回答数 0

1

回答

java中使用BigDecimal计算操作性能最优的做法是什么?

2021-11-06 16:35:15 215浏览量 回答数 1

1

回答

java中ArrayBlockingQueue与DoubleBufferedQueue哪个性能更高?

2021-11-06 21:47:49 194浏览量 回答数 1

1

回答

java中常用的性能调优诊断工具都有哪些,请帮忙提供一下?

2021-11-06 10:24:39 146浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载