当前位置: 首页 > 面试题库 >

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

屠锦
2023-03-14
问题内容

我可以在Java中使用Scala List,例如:

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列表,编译器抱怨

“内部编译器错误:java.lang.ClassCastException:org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding无法转换为org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding
at org.eclipse.jdt.internal。
editor.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中运行。


问题答案:

一个小的Java端帮助程序方法可以解决问题:

import scala.collection.immutable.List;
import scala.collection.immutable.List$;
import scala.collection.immutable.$colon$colon;

public class HelloScalaList {

    public static void main (String[] args) {
        List xs = list(1,2,3);
        System.out.println(xs);
    }

    public static <T> List<T> list(T ... ts) {
        List<T> result = List$.MODULE$.empty();
        for(int i = ts.length; i > 0; i--) {
            result = new $colon$colon(ts[i - 1], result);
        }
        return result;
    }
}

[更新]

由于这个问题,我开始了一个名为“
Scava”的小项目,以支持从Java到Scala的调用:http :
//code.google.com/p/scava-org/



 类似资料:
  • 问题内容: 我有兴趣将GitHub上的项目用作我项目中的依赖项。GitHub项目有一个文件。我可以修改我的文件以使用该项目吗?如果是这样,怎么办?如果没有,我的最佳做法是什么? 问题答案: AFAIK,我的意思不是这样。 您可以将github用作Maven存储库-这与直接引用项目不同,它具有pom文件意味着仅是Maven项目。 如果 项目在中央存储库或其他存储库中不可用,则最好的选择是克隆,构建并

  • 在QueryDSL中有没有一种方法可以插入JPA实体而不直接使用JPA提供者? 我的用例问题如下。我使用Hibernate和两个实体之间的连接表映射。 这样的事情可行吗?

  • 我正在编写在坐标系上运行的程序,所以我需要经常使用坐标。我决定使用类,因为它显然允许轻松存储点的坐标。 问题是在我的程序中的任何地方,我都将其存储为,而在使用和方法时返回双倍。当然,我可以轻松地将其强制转换为,但它看起来不是很优雅,并且会给代码添加不必要的混乱。 如果我直接得到值,可以吗?这样地: 而不是: 我甚至不确定它是否有任何区别,我只知道getter和setter存在是有原因的,应该使用。

  • 有很多方法可以通过google drive sync windows应用程序将我的本地git存储库同步到我的google drive,但我想知道是否可以完全绕过它的需要。 Fro eg.

  • 问题内容: 我目前安装了Java 7 JDK。已经有一段时间了。但是,最近,我的教授正在指导全班教师卸载Java JDK 7并安装Java JDK 8,以便能够从事家庭作业等。 我一直在使用Java JDK 7编写和部署Android应用程序而没有任何问题,所以我想知道现在升级JDK 8是否安全?我假设我在Android开发中不需要任何Java 8特定的方法或函数。因此,如果我不这样做,我的And

  • 问题内容: 我正在学习Scala,并好奇是否有可能: 创建一个在Scala中实现Java接口的对象 将对象编译成类文件并将其打包 使用Java中的对象 我想在Scala中实现自定义Lucene查询解析器,并能够让其他人从Java应用程序访问它。 问题答案: 我假设“对象”实际上是“类”。无论如何,答案是肯定的,您可以这样做。如果您希望所有这些都在同一项目中,则需要利用Scala / Java联合编