在scala REPL中导入自定义java类

时间:2014-02-20 23:17:25

标签: java api scala

我是Scala的新手,事实上我在Java中也是一个无知的人(我对我的Java知识没有更深入的兴趣)。问题是我使用的Java API仅适用于Java(Freeling Java API)。

现在,我创建了一个java类调用Analyzer,只有一个静态公共方法调用analyze,它接受一个单词串(句子的所有部分)并返回一个String的java.util.ArrayList,其中每个字符串都有这句话中每个单词的单词,引理和标签(使用freeling)。

现在,我知道您可以无缝地在scala应用程序中使用java类。我声明了包(命名分析器)并将“Analyzer.java”编译为“Analyzer.class”。我的想法是将这个类“Analyzer”加载到scala REPL中(另一次加载到scala源文件中)并从scala REPL中使用它来查看它是否有效。

我的意思是,我想在Scala REPL中做这样的事情:

scala> import analyzer.Analyzer
scala> val result: java.util.ArrayList[String] = Analyzer.analyze("The cat eats fish")
scala> println(result.get(0))
The the DT

问题在于,当我尝试导入包时,它会给我一个错误:

scala> import analyzer.Analyzer
<console>:7: error: not found: value analyzer
   import analyzer.Analyzer

即使我使用指向Analyzer.class所在目录的-classpath选项启动scala。

这可能吗?我该怎么办?

1 个答案:

答案 0 :(得分:2)

import仅使命名空间的内容可用,而无需使用包来限定它。为了让编译器找到你的包,它必须在类路径上。如果将Java类打包到.jar文件中,则可以使用特殊的:cp path-to-jar命令将该文件动态添加到REPL。或者,您可以在启动Scala(-cp my-path)时将Java类的目录放在类路径上。

由于您编写的内容使用了-classpath选项,因此您可能使用了错误的路径。如果您的Java类在包analyzer中,则必须添加包含目录analyzer的位置的路径。