gpt4 book ai didi

7和8中的Java通配符区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:10 26 4
gpt4 key购买 nike

我有以下代码,它在 Java 8 上运行良好:

List<Class<?>> KEY_NAME_CLASSES = Collections.singletonList(String.class);

但是当我尝试使用 Java 7 编译器时,出现错误:

incompatible types: java.util.List<java.lang.Class<java.lang.String>> cannot be converted to java.util.List<java.lang.Class<?>>

为什么?有什么方法可以在 Java 7 中使用此类通配符吗?

最佳答案

类型推断在 Java-7 和 Java-8 中有很大不同。简而言之,Java-7 仅使用表达式本身来确定表达式类型,而 Java-8 可以使用周围的上下文。所以表达式的类型 Collections.singletonList(String.class)在 Java-7 中是可以从此表达式确定的最精确的类型,即 List<Class<String>> . Java-8 更聪明:它看起来也将此表达式分配给另一个兼容类型 List<Class<?>> , 所以它设置了 Collections.singletonList(String.class) 的类型至 List<Class<?>>

要使此代码在 Java-7 中工作,您应该明确指定泛型类型:

List<Class<?>> KEY_NAME_CLASSES = Collections.<Class<?>>singletonList(String.class);

关于7和8中的Java通配符区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38764371/

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