Я не хочу утверждать, что "невозможно" использовать scala.collection.mutable.wrappedArray
из вашего Java-кода, но, по моему мнению, если вы задаете такие вопросы, вы делаете это неправильно.
Стандартная библиотека Scala обеспечивает большую функциональность для преобразования между структурами данных Scala и структурами данных Java.
Стандартная библиотека Java не не предоставляет никаких инструментов для работыКоллекции Scala, он вообще ничего не знает о Scala.
Поэтому возникает вопрос "как я могу преобразовать scala.x.y.Z
в java.r.s.T
в Java " по сути бессмысленно: не пытайтесь выполнить преобразование в Java, сделайте это в Scala, это намного проще.
Общий подход
Предположим, что выесть метод foo
, реализованный в Scala, который возвращает специфическую для Scala структуру данных scala.x.y.Z
:
// Scala code
def foo(): scala.x.y.Z = ???
Очевидно, что вы пытаетесь сделать:
// Java code
scala.x.y.Z a = yourScalaLibrary.foo();
java.r.s.T b = /*
crazily complex java code
that converts scaa.x.y.Z to java.r.s.T
*/
MyПредложение таково: просто не делай этого.Вместо этого реализуйте дополнительный специфичный для Java API в Scala :
// Scala code
def javaFoo(): java.r.s.T = {
scala.x.y.Z a = foo()
java.r.s.T b = /* simple conversion code using Scala-Java interop */
b // return Java-specific collection
}
, а затем используйте только Java-API в своем коде Java:
// Java code
java.r.s.T b = javaFoo();
Конкретный пример
Предполагая, что вы хотите использовать этот метод из Java:
def foo(): scala.collection.mutable.WrappedArray[Int] = Array(1, 2, 3)
вы сначала реализуете Java-API (в Scala!):
import collection.JavaConverters._
def javaFoo(): java.util.List[Int] = foo().asJava
и затем использовать его из Java:
java.util.List myList = javaFoo();