一尘不染

我可以使用可从Java实现Java接口的scala类吗?

java

我正在学习Scala,并好奇是否有可能:

  1. 创建一个在Scala中实现Java接口的对象
  2. 将对象编译成类文件并将其打包
  3. 使用Java中的对象

我想在Scala中实现自定义Lucene查询解析器,并能够让其他人从Java应用程序访问它。


阅读 318

收藏
2020-12-03

共1个答案

一尘不染

我假设“对象”实际上是“类”。无论如何,答案是肯定的,您可以这样做。如果您希望所有这些都在同一项目中,则需要利用Scala / Java联合编译器。例如:

public interface Parser {
    public TokenIterator parse(InputStream is);
}

然后在Scala中:

class ParserImpl extends Parser {
  def parse(is: InputStream) = ...
}

最后,再次在Java中:

public class Consumer {
    public static void main(String[] args) {
        Parser p = new ParserImpl();       // just like a Java class!
        ...
    }
}

如果所有这些源文件都在同一个项目中,那么您将需要使用以下命令调用来编译它们:

$ scalac *.scala *.java
$ javac -classpath . *.java

第一个命令调用Scala /
Java联合编译器,该编译器将编译Scala源代码以及足以满足任何依赖关系的Java源代码。第二个命令使用类路径上最近编译的Scala类调用Java编译器。

2020-12-03