作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类:
public class MultipleSorting<T extends Enum<?>> {
private T criteriaType;
public Class<T> getCriteriaClass() {
Field field = ReflectionUtils.getField(getClass(),"criteriaType");
ReflectionUtils.makeAccessible(field);
return (Class<T>)field.getType();
}
}
该类被实例化为:
public abstract class MultiSortPageableController<T extends MultiSortPageableController<?,?>, U extends Enum<?>> {
private MultipleSorting<U> multipleSorting;
public MultiSortPageableController() {
super();
multipleSorting = new MultipleSorting<U>();
}
}
U
的实际值是从 MultiSortPageableController
的子类传递的,即:
public abstract class AbstractArticleSearchController<T extends AbstractArticleSearchController<T>> extends MultiSortPageableController<T,ArticleSortField> {
}
ArticleSortField
是一个Enum
。
我期望 MultipleSorting
的方法 getCriteriaClass
会从 MultiSortPageableController
的方法返回 ArticleSortField
。但它正在返回java.lang.Enum
。
我无法弄清楚为什么它没有返回实际的枚举以及如何才能做到这一点。任何指针都会对我非常有帮助。我需要获取ArticleSortField
。
我有两个要求:
ArticleSortField.class
)class..getEnumConstants()
。最佳答案
Java 编译器会删除有关泛型的信息,因此当您使用反射时,除了 Enum 之外,您不会获得有关声明类型的信息。这个过程称为type erasure .
如何通过构造函数向下传递类型,如下所示:
public class MultipleSorting<T extends Enum<?>> {
private Class<T> criteriaType;
MultipleSorting(Class<T> criteriaType) {
this.criteriaType = criteriaType;
}
public Class<T> getCriteriaClass() {
return criteriaType;
}
}
public abstract class MultiSortPageableController<T extends MultiSortPageableController<?, ?>, U extends Enum<?>> {
private MultipleSorting<U> multipleSorting;
public MultiSortPageableController(Class<U> criteriaType) {
super();
multipleSorting = new MultipleSorting<U>(criteriaType);
}
}
public abstract class AbstractArticleSearchController<T extends AbstractArticleSearchController<T>> extends MultiSortPageableController<T, ArticleSortField> {
public AbstractArticleSearchController() {
super(ArticleSortField.class);
}
}
关于java - 获取参数化类 T extends Enum<?> 的实际枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763803/
我是一名优秀的程序员,十分优秀!