gpt4 book ai didi

Java 泛型 - 使用 Class (clazz 无法解析为类型)

转载 作者:行者123 更新时间:2023-12-01 23:11:59 30 4
gpt4 key购买 nike

我一直在与 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com