作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在与 Java 泛型作斗争,这就是我正在尝试做的事情:
...
sortedActions = new ArrayList<BaseAction>();
ActionGroup<? extends BaseAction> actionGroup = null;
for (final BaseAction action : sortedActions) {
Class<? extends BaseAction> clazz = action.getClass();
if (actionGroup == null) {
actionGroup = new ActionGroup<clazz>(); // <-- "clazz cannot be resolved to a type"
}
}
ActionGroup 的定义如下: 公共(public)类 ActionGroup { ...
我不明白这个错误,当我检查调试器时,clazz被初始化,它的类型是“java.lang.Class”,它的值是“my.packacge.SubAction”,它是BaseAction的子类,那么它如何不解析为类型呢?或者,我在这里不明白什么?
最佳答案
你不能这样做:尖括号之间的部分必须是编译器已知的类型名称,而不是 Class<C>
对象,只有在运行时您的程序才知道该对象。
这是不允许的,因为 Java 中的泛型几乎纯粹是一个编译时概念 *。通用类型参数被提供给编译器,以便它可以执行额外的类型检查。如果不需要编译时检查,您可以使用该类的非泛型版本,而无需任何额外的成本或好处。
<小时/> * 编译器在编译后的代码中留下泛型的痕迹,例如在类元数据中,但这几乎就是它的范围。关于Java 泛型 - 使用 Class<? 类型的变量extends Whatever> (clazz 无法解析为类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789571/
我是一名优秀的程序员,十分优秀!