gpt4 book ai didi

java - 接受通用通配符但不接受类型 T

转载 作者:行者123 更新时间:2023-11-30 06:11:15 24 4
gpt4 key购买 nike

对于以下情况,假设 AModel.class extends ABCModel,案例 1

案例 1 有效

public static Class<? extends ABCModel> getModel(String objectModel) {

if(objectModel.equalsIgnoreCase("")) {
return AModel.class;
}

return null;

}

情况 2(抛出编译错误)

public  static <T extends ABCModel> Class<T> getModel(String objectModel) {

if(objectModel.equalsIgnoreCase("")) {
return AModel.class;
}

return null;

}

是不是目的不一样?

最佳答案

在第二种情况下,您要约束类型变量 T扩展ABCModel并 promise 返回Class<T> .然而 T不会在任何地方绑定(bind),因此在编译期间无法确定 T 是什么是。

与示例1不同的是返回类型定义为Class<? extends ABCModel> ,其上限为 ABCModel .

一种绑定(bind)方式 T在第二种情况下,在编译期间将其作为方法的参数提供,例如:

public static <T extends ABCModel> Class<T> getModel(String objectModel, Class<T> clazz) {

现在T基于传递给方法的参数进行绑定(bind)(这就是为什么你会看到很多通用方法采用 Class 参数)。

当然,这对您的方法没有帮助,因为您要检索 Class ,如果您已经将它传入,则这是不必要的。但这仅意味着您应该使用示例 1 或修复您的设计。

关于java - 接受通用通配符但不接受类型 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34401788/

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