Java:连接Scala模块
我想在我的程序中使用Java OOP对代码结构化的好处和Scala函数方法对实现递归算法的好处 如何在应用程序中组合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
实际上,我指的是如何将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模块