java - 我可以直接在Java中使用scala List吗?

标签 java scala-collections scala-java-interop

我可以在 Java 中使用 scala 列表吗,例如:

import scala.collection.immutable.List;
class HelloScalaList {
    public static void main (String[] args) {
        List xs = List(1, 2, 3);
        System.out.println(xs);
    }
}

它似乎没有编译。找不到 List$.apply 方法。

当我把它改成

List xs = Dir.ls()

其中 Dir 是我的 scala 类,而 ls() 返回一个 scala 列表,编译器提示

"Internal compiler error: java.lang.ClassCastException: org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding cannot be cast to org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.initializeTypeVariable(BinaryTypeBinding.java:927)"

我不知道这是什么意思。


我想用 scala 编写一些库,但也希望它能在 Java 中使用。

在我的 scala 类中有返回 scala List 的方法,为了让 java 代码使用它们,我有两个选择:

  1. 直接在java中使用scala List

  2. 为这些方法编写一个返回 java.util.List 的包装类。

我宁愿选择选项 1,否则我将不得不为几乎所有的 Scala 类编写一个包装器类。

但我无法让 scala List 在 Java 中运行。

最佳答案

Scala 2.10 开始,我没有成功使用上述技巧。

但是你可以使用下面的代码:

  public static <T> scala.collection.immutable.List<T> scalaList(List<T> javaList) {
    return scala.collection.JavaConversions.asScalaIterable(javaList).toList();
  }

关于java - 我可以直接在Java中使用scala List吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524868/

相关文章:

java - 在非单例 bean 上的 Spring 代理上修复 BeanNotOfRequiredTypeException?

Scala:我有一个 Set[X] 和函数 (X) => Future[Y] 并想输出一个 Future[Map[X, Y]]

java - 如何将scala高级类型功能的混合类型与java泛型类型相匹配?

java - 将 Scala Any 转换为 Java 对象

java - 将 Java 字节码翻译成其他表示和编程语言

java - 无法使用 FileObserver 观察文件夹内的文件

java - Java的时间序列数据库?

scala - 为什么 Map 操作后 Range 会转换为 Vector?

Scala 将集合转变为按键映射的最佳方法?

java构造函数无法转换为scala