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

tom*_*eng 17 java scala interface

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

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

我想在scala中实现自定义lucene查询解析器,并允许其他人从java应用程序访问它.

Dan*_*wak 28

我假设通过"对象"你实际上意味着"阶级".无论如何,答案是肯定的,你可以这样做.如果您希望在同一个项目中使用Scala/Java联合编译器,则需要利用它.例如:

public interface Parser {
    public TokenIterator parse(InputStream is);
}
Run Code Online (Sandbox Code Playgroud)

然后在斯卡拉:

class ParserImpl extends Parser {
  def parse(is: InputStream) = ...
}
Run Code Online (Sandbox Code Playgroud)

最后,再次在Java中:

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

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

$ scalac *.scala *.java
$ javac -classpath . *.java
Run Code Online (Sandbox Code Playgroud)

第一个命令调用Scala/Java联合编译器,它将编译Scala源和足够的Java源以满足任何依赖性.第二个命令使用类路径上最近编译的Scala类调用Java编译器.