gpt4 book ai didi

java - 为什么在Optional.map(byte[]::clone) 上出现编译错误?

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

我在这里绝对找不到适合我的问题的答案。情况:在工作中,我查看了一个现有的 Java8 项目。我使用 Eclipse Neon (4.6.0)

一个类有这个字段:

private final byte[] stream;

类构造函数有这个参数:

byte[] stream

它的作用是:

    this.stream = Optional.ofNullable(stream)
.map(byte[]::clone)
.orElse(ArrayUtils.EMPTY_BYTE_ARRAY);

不幸的是,表达式有错误:Type mismatch: cannot convert from Object to byte[]特别是 .map(byte[]::clone)部分返回 Optional<Object> (根据 Eclipse)而不是 Optional<byte[]> .

由于我是唯一一个使用 Eclipse 的人 - 其他人使用 IntelliJ 并且他们没有出现错误 - 我只能自己处理这个问题。

我可以/应该做什么(除了按照 Eclipse 的快速修复建议在表达式中的某个位置强制转换为 byte[] 之外)?

注意:我记得几年前曾在 Java 1.5 泛型中看到过类似的奇怪编译错误,但事实恰恰相反:我使用 Eclipse 没问题,但其他人我使用与使用过的 Netbeans 一起工作,他遇到了编译错误(经过一番搜索,他发现这是 JDK 中的一个错误)。

最佳答案

您应该将此报告为 Eclipse 中的错误,因为它使用标准 javac 编译器和其他 IDE 进行编译。具体来说,Eclipse 似乎缺少 Array Members 上的 Java 语言规范部分中的以下内容: :

The members of an array type are all of the following:

  • The public final field length, which contains the number of components of the array. length may be positive or zero.

  • The public method clone, which overrides the method of the same name in class Object and throws no checked exceptions. The return type of the clone method of an array type T[] is T[].

请注意,byte[] 中覆盖的 clone 的返回类型实际上是 byte[],而不是 Object. Eclipse 编译器似乎将类型推断为 Object

关于java - 为什么在Optional.map(byte[]::clone) 上出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38528689/

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