返回类型的推断通配符泛型

返回类型的推断通配符泛型,第1张

返回类型的推断通配符泛型

构造函数起作用的原因是您要明确指定类型参数。如果这样做,静态方法也将起作用:

Pair<Class<?>, String> pair = Pair.<Class<?>, String>of(List.class, "hello");

当然,首先使用静态方法的全部原因可能只是为了获得类型推断(这根本不适用于构造函数)。

这里的问题(如您建议的那样)是编译器正在执行捕获转换。我认为这是[JLS第15.12.2.6条]的结果:

  • 所选方法的结果类型确定如下:
    • 如果所调用的方法声明为返回类型为void,则结果为void。
    • 否则,如果要使该方法适用就必须进行未经检查的转换,则结果类型是该方法的声明的返回类型的擦除(第4.6节)。*否则,如果要调用的方法是泛型的,则对于1in,令Fi为该方法的形式类型参数,令Ai为为该方法调用推断的实际类型参数,并令R为该方法的声明的返回类型。调用。通过将捕获转换(第5.1.10节)应用于R
      [F1:= A1,…,Fn:= An]获得结果类型。
    • 否则,通过将捕获转换(第5.1.10节)应用于方法声明中给定的类型来获得结果类型。

如果您确实想要推断,则一种可能的解决方法是执行以下 *** 作:

Pair<? extends Class<?>, String> pair = Pair.of(List.class, "hello");

变量

pair
将具有更宽的类型,这的确意味着要在变量的类型名称中键入更多内容,但至少您无需再强制进行方法调用。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5489035.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存