Java:连接Scala模块

Java:连接Scala模块,java,scala,Java,Scala,我想在我的程序中使用Java OOP对代码结构化的好处和Scala函数方法对实现递归算法的好处 如何在应用程序中组合Java和Scala功能 实际上,我指的是如何将fewq Scala类连接到我的java web应用程序?以下是我最近正在研究的一个简短示例: 在Alfresco中,webscript(类似于类固醇上的servlet,实际上现在是Spring框架的一部分)是使用以下Java接口/类定义的: public interface WebScript { /** * Execute

我想在我的程序中使用Java OOP对代码结构化的好处和Scala函数方法对实现递归算法的好处

如何在应用程序中组合Java和Scala功能


实际上,我指的是如何将fewq Scala类连接到我的java web应用程序?

以下是我最近正在研究的一个简短示例:

在Alfresco中,webscript(类似于类固醇上的servlet,实际上现在是Spring框架的一部分)是使用以下Java接口/类定义的:

public interface WebScript
{
  /**
 * Execute the Service
 * 
 * @param req   WebScriptRequest representing the request to this service
 * @param res   WebScriptResponse encapsulating the result of this service
 * 
 * @throws IOException
 */
public void execute(WebScriptRequest req, WebScriptResponse res)
    throws IOException;
}
现在,我可以轻松地为Scala WebScript定义一个基类,引入日志记录和一些样板代码作为Scala特性:

abstract class WebscriptBase extends AbstractWebScript with ServiceBase with Logging {
   // "ServiceBase" and "Logging" are two Scala traits 
}
我定义了一个webscript类,覆盖了原始Java接口中声明的抽象方法:

class SampleWebscript extends WebscriptBase {

  override def execute(req: WebScriptRequest, response: WebScriptResponse): Unit = {

  try {
    response.setContentType(MIMETYPE_JSON)
    val writer = new PrintWriter (response.getWriter)
    writer.println("{'Hopp':'Topp'}")
  }

 }

 }
最后,我在Springbean配置中使用这个类(用Scala编写):

<bean id="webscript.de.treufuss.dedup.helloWorld.get" parent="webscript" class="de.treufuss.alfresco.service.dedup.webscript.SampleWebscript">
</bean>


请注意,“SampleWebscript”类看起来和感觉上都像一个普通的java类——唯一的魔力是将java的方法签名转换成Scala语法

在Scala中编写代码并不能防止StackOverflower错误。除非递归方法可以写成尾部递归,否则Scala编译器可能会将其编译成循环

像这样的简单函数将导致StackOverflower错误

def f(i: Long):Long = i match {
    case 1 => 1
    case n => f(n-1) + n
}
当我在Scala REPL中测试时,
6095
足以让它崩溃

尾部递归版本可以是

def f(i: Long):Long = {
    @tailrec
    def ff(ii: Long, ans: Long): Long = ii match {
        case 0 => ans
        case n => ff(ii-1, ans + n)
    }
    ff(i, 0)
}

不,我已经学习了Java和Scala的基础知识。所以我不会换成C。除此之外,Scala也是面向对象的,但正如我所提到的,我的知识非常浅薄,你在寻找这样的东西吗?Java和Scala类之间的互操作性定义良好:,因此“证据就在布丁里”。使用Scala类很容易实现Java接口;或者用Scala类代替Java类。不,这似乎不是我搜索的东西。我有一些需要递归的算法。我可以在Java中使用深度递归,因为我将得到StackOverflowException。但是Scala有一个非常漂亮的东西,比如尾部递归。因此,我决定在中实现我的算法Scala@Gyro请提供一个例子的参考是的,当然。实际上,出于这个原因,我尝试连接scala模块