Java注解annotation 异常: invalid typ
2022-07-20 本文已影响0人
雪飘千里
我们经常会自定义注解,自定义注解时,可能会需要定义各种数据类型,但是自定义注解可以包含哪些数据类型,是存在限制的。
主要有如下几种:
- A primitive type : 基本类型(java的八种基本类型:byte、short、int、long、float、double、char、boolean)
- String : 字符串
- Class :Class
- An enum type : 枚举
- An annotation type :注解
- An array type :类型为以上任一类型的数组
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Demo {
//1. 基本类型(java的八种基本类型:byte、short、int、long、float、double、char、boolean)
int aaa();
//2. String : 字符串
String str();
//3. Class :Class
Class clazz();
//4. 枚举
GoodsStateEnum goodsStateEnum();
//5. 注解
Export export();
//6. 类型为以上任一类型的数组
Class[] stringArray();
}
如果需要用到其他类型咋办,比如我们需要用到一个自定义的实体类,其实简单,可以用Class 定义,然后利用反射(.newInstance())来创建对象。
比如下面这样,
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Upload {
//业务模块名称
String moduleName() default "";
//文件过期时间
int expireTime() default 24;
//文件名称
String fileName() default "";
//excel解析类
Class clazz();
//excel 监听器
Class listener();
}
@Upload(moduleName="aaa",expireTime=3,clazz = MallOrderExcelVO.class,listener = MallOrderExcelListener.class)
List list= EasyExcel.read(new FileInputStream(new File(filePath)),annotation.clazz(),(AnalysisEventListener)annotation.listener().newInstance()).sheet().doReadSync();
完整代码见 Java注解实现异步上传