簡體   English   中英

如何在 Scala 中實現返回用數組參數化的泛型類型的 Java 方法?

[英]How to implement Java method returning a generic type parametrized with array in Scala?

我在 Java 中有一個具有以下方法的接口:

<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似乎也可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM