我尝试使用注释处理器来生成类似的方法:
void result(Consumer<Type> name){
}
我需要使用注释来表示参数。
@Retention(RetentionPolicy.SOURCE)
public @interface Parameter {
String name();
Class<?> type();
}
但是注释成员只支持编译时常量,所以不可能直接传递参数化类型,例如下面的非法java代码不能用注释表示。
@Parameter(name ="ids",type = ArrayList<Integer>.class)
我试图声明一个新的注释来表示类型,因为泛型参数可以是一个或多个并嵌套,例如ArrayList <HashMap <String, String >>
,但java不支持注释引用本身,它会导致循环注释元素类型错误。以下注释也是非法的。
public @interface Type{
Class<?> type();
Type[] parameters() default {};
}
@Retention(RetentionPolicy.SOURCE)
public @interface Parameter {
String name();
Type type();
}
任何解决方案?
答案 0 :(得分:0)
如果无法将值表示为注释参数,则标准解决方案是使用字符串。例如,使用@Parameter(..., type = ArrayList<Integer>.class)
而不是@Parameter(..., type = "ArrayList<Integer>")
,它可以表示任意嵌套的参数化类型。
使用注释的代码必须解析和验证String参数。