作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法在 Java 注释中接收泛型类型作为值?
// The generics interface:
public interface TypeConverter<S, R> {
public R convert(S sourceType);
}
// The implementation:
public DateConverter extends TypeConverter<String, Date> {
public String convert(Date sourceType) { ... }
}
// Applying the custom converter through an annotation on a field:
...
Converter(DateConverter.class);
public Date dateField;
...
// The issue! Receiving the generic type in an annotation value:
public @interface Converter {
//How to use the generic type as the type of "value"?
Class value() default void.class;
// versus
//Class<? extends TypeConverter> type() default void.class;
}
查看上面注释 Converter
上的注释。
最佳答案
没有办法做到这一点,但是,您可能会对一种解决方法感兴趣。
如果您不希望注释参数为必需且无法传递默认值,则始终可以使用数组。
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
值。关于java - 在 Java 中强制将泛型接口(interface)作为注释的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56137742/
我是一名优秀的程序员,十分优秀!