gpt4 book ai didi

java - 如何在 Scala 中实现返回用数组参数化的泛型类型的 Java 方法?

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

我在 Java 中有一个带有以下方法的接口(interface):

<E> Encoder1<E[]> arrayArg(Encoder1<? super E> elemEncoder);

我正在尝试使用以下声明在 Scala 中实现它:

override def arrayArg[E](elemEncoder: Encoder1[_ >: E]): Encoder1[Array[E]]

我收到以下错误:

Error:(38, 16) overriding method arrayArg in trait Encoders of type [E](elemEncoder: redradishes.encoder.expr.Encoder1[_ >: E])redradishes.encoder.expr.Encoder1[Array[E with Object]];
method arrayArg has incompatible type
override def arrayArg[E](elemEncoder: Encoder1[_ >: E]): Encoder1[Array[E]] = ???
^

我的 Scala 方法签名有什么问题?

最佳答案

请看这个: https://issues.scala-lang.org/browse/SI-4390

我不确定我是否完全理解为什么,但您需要在返回值中指定 E with Object 才能编译。该错误会通知您。这可能是因为在 java 中你不能使用原始类型 (AnyVal) 作为泛型参数,但在 scala 中你可以,所以你需要指定 E extends Object 使其符合 Java 规则。我仍然不确定为什么这种情况如此特殊。

如果您对 Object 感到不舒服,E with AnyRef 似乎也可以。

关于java - 如何在 Scala 中实现返回用数组参数化的泛型类型的 Java 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33845990/

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