用的easyExcel 这个注解value是String[],这边方法传的也是String[] 出现了传参报错
java.lang.RuntimeException: java.lang.IllegalArgumentException: wrong number of arguments
@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Inheritedpublic @interface ExcelProperty { String[] value() default {""}; int index() default -1; int order() default Integer.MAX_VALUE; Class<? extends Converter<?>> converter() default AutoConverter.class; /** @deprecated */ @Deprecated String format() default "";}
ExcelProperty annotation = DogImport.class.getDeclaredField("field").getAnnotation(ExcelProperty.class); String[] datas = new String[]{"new value"}; setAnnotationValue(annotation, "value", datas);
public static void setAnnotationValue(Object annotation, String propertyName, Object value) throws Exception { Method valueMethod = annotation.getClass().getDeclaredMethod(propertyName); valueMethod.setAccessible(true); valueMethod.invoke(annotation,(Object) value); }
这个问题出现的原因是,setAnnotationValue
方法中,你尝试将一个数组对象直接转换为Object类型,然后传递给valueMethod.invoke()
。实际上,你应该传递数组的第一个元素,而不是整个数组。
修改后的setAnnotationValue
方法如下:
public static void setAnnotationValue(Object annotation, String propertyName, Object value) throws Exception { Method valueMethod = annotation.getClass().getDeclaredMethod(propertyName); valueMethod.setAccessible(true); // 如果是数组类型,只取第一个元素 if (value.getClass().isArray()) { value = ((Object[]) value)[0]; } valueMethod.invoke(annotation, value);}
这样,当value是数组类型时,valueMethod.invoke()
会接收数组的第一个元素作为参数,从而避免了java.lang.IllegalArgumentException: wrong number of arguments
这个错误。
如何动态修改实体类注解上的参数? 现在有个需求是EXCEL导入图片 这里用的是easypoi.excel 但是@Excel注解上的savePath是写死的,因为本地、测试、线上的路径都不一样,每次打包都要改 如何根据环境动态的去配置这个路径,所以我想在项目加载时动态去获取服务器的相对路径并设置
Java 导出 Excel 如何添加批注 想在一个excel文件中通过java代码添加批注(注意不是注释),有没有推荐的方案。需求是导出时批注不能丢失,要能与Excel兼容。
Java 导出Excel时如何添加注释? 我想在一个excel文件中添加注释,并且可以导出打开。有推荐的方案吗?
本文向大家介绍Java 反射修改类的常量值、静态变量值、属性值实例详解,包括了Java 反射修改类的常量值、静态变量值、属性值实例详解的使用技巧和注意事项,需要的朋友参考一下 前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值。 定义一个实体类 利用反射修改私有静态常量方法 修改
本文向大家介绍java 实现反射 json动态转实体类--fastjson,包括了java 实现反射 json动态转实体类--fastjson的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 补充:使用fastjson 进行jsonObject转实体类对象 首先引入相关jar包, 假设有一个实体类User 然后通过fastJson进行类型转换 以上为个人经验,希望
但是,由于某种原因,总是,所以我不确定这是注释类的问题还是我使用反射的方式的问题。我很确定是后者,因为在调试时,我发现它能够访问带有注释的方法。如有任何帮助,不胜感激,谢谢!