在Java中将通用接口强制为注释的值

时间:2019-05-14 19:55:05

标签: java generics annotations

是否可以通过Java批注将通用类型作为值接收?

Converter

在上面的注释wine上查看注释。

1 个答案:

答案 0 :(得分:1)

无法执行此操作,但是,您可能会感兴趣的一种解决方法。

如果您不希望使用注释参数,并且无法传递默认值,则可以始终使用数组。

public @interface Converter {
  Class<? extends TypeConverter>[] type() default {};
}
//.. and the possible usages
@Converter
@Converter(type = FooConverter.class)
@Converter(type = { FooConverter.class, ThisIsWhatCanHappen.class }) // this is the downside of this approach

// retrieving type from annotation
void foo(Converter converter) {
  TypeConverter typeConverter = converter.type().length > 0
    ? converter.type()[0]
    : null; // or some default value
  // now that you have your TypeConverter do a backflip or something
}

有两个缺点

  • 一个数组可以是任意长度,您无法控制它(这可能会造成混淆)
  • 使用起来有点不舒服,您必须检查数组是否不为空,并使其成为访问type值的第一个元素。