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

发布于 2022-09-02 11:30:27 字数 2235 浏览 10 评论 0

想通过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;

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最后的乘客 2022-09-09 11:30:28

要用 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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文