gpt4 book ai didi

java-8 - JDK8 类型推断问题

转载 作者:行者123 更新时间:2023-12-04 14:56:14 25 4
gpt4 key购买 nike

由于类型推断,我正在尝试运行在 JDK8 下编译良好的以下代码:

public static <A,B> B convert(A a) {
return (B) new CB();
}
public static void main(String[] args) {
CA a = new CA();
CB b = convert(a); //this runs fine
List<CB> bl = Arrays.asList(b); //this also runs fine
List<CB> bl1 = Arrays.asList(convert(a)); //ClassCastException here
}

但是,运行它会抛出 ClassCastException: CB cannot be cast to [Ljava.lang.Object,但 CB b = convert(a) 工作正常。

知道为什么吗?

最佳答案

每当你创建一个带有签名的泛型方法, promise 返回调用者想要的任何东西时,你就是在自找麻烦。你应该从编译器那里得到一个“未经检查”的警告,这基本上意味着:意外 ClassCastException s 可能发生。

您希望编译器推断

List<CB> bl1 = Arrays.asList(YourClass.<CA,CB>convert(a));

而编译器实际上推断
List<CB> bl1 = Arrays.asList(YourClass.<CA,CB[]>convert(a));

据我所知,因为它更喜欢不需要 varargs 包装的方法调用(与 pre-varargs 代码兼容)。

这失败了,因为您的 convert方法不返回预期的数组类型。

关于java-8 - JDK8 类型推断问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39021934/

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