反射 數組參數遇到的坑java.lang.IllegalArgumentException: wrong number of arguments

java.lang.IllegalArgumentException: wrong number of arguments

先上錯誤代碼

 public GunConfigDTO getConfig() {
        GunConfigDTO gunConfigDTO = new GunConfigDTO();
        Field[] fields = GunConfigDTO.class.getDeclaredFields();
        fields[0].toString();
        List<Gunconfig> all = gunconfigMapper.findAll();
        for (Gunconfig gunconfig : all
        ) {
            for (int i = 0; i < fields.length; i++) {
                String name = fields[i].getName();
                Method method = null;
                if (gunconfig.getName().equals(name)) {
                    if (fields[i].getType().isArray()) {
                        String[] split = gunconfig.getValue().split(",");
                        Double[] doubles = StringToDouble(split);
                        try {
                            try {
                                method = gunConfigDTO.getClass().getMethod("set" + do17(name), Class.forName("[Ljava.lang.Double;"));
                            } catch (ClassNotFoundException e) {
                                e.printStackTrace();
                            }
                            try {
                                method.invoke(gunConfigDTO, doubles);//這裏就是錯誤行
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            } catch (InvocationTargetException e) {
                                e.printStackTrace();
                            }
                        } catch (NoSuchMethodException e) {
                            e.printStackTrace();
                        }
                    } else {
                        try {
                            method = gunConfigDTO.getClass().getMethod("set" + do17(name), Double.class);
                        } catch (NoSuchMethodException e) {
                            e.printStackTrace();
                        }
                        try {
                            method.invoke(gunConfigDTO, Double.parseDouble(gunconfig.getValue()));
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        } catch (InvocationTargetException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        return gunConfigDTO;
    }

只需要把錯誤行改成

method.invoke(gunConfigDTO, (Object)doubles);

OK了!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章