2010-03-04 70 views
7

过去几个月我一直在学习Scala,现在我觉得除了解决一些简单的问题之外,我可以开始使用真正的工作。这里我的问题是这两个方面的合作有多好?Java和Scala如何一起工作?

我有几个Java项目,我现在正在处理。在它们中开始使用scala会有多容易?有什么需要注意的吗?是否有任何教程或一些可用的东西可用?如果我想在Web项目中使用Scala,那么如何去做(除了电梯)?欢迎所有的想法和建议。

回答

14

通常,使用Scala代码中的Java库比使用Java中的Scala东西更容易。这很容易发生,因为Scala具有先进的功能,这些功能在技术上可以在java中访问,但由scala编译器通过生成具有重名的各种额外类来实现。

如果你的“main”程序现在要用java编写,但你想在scala中实现一些功能或模块,你应该根据Java接口来定义你的模块。然后,让你的Scala代码实现这些接口。

希望你很快就会发现,你很喜欢scala,所以你转换为scala是主要的语言,调用你的旧Java代码。

+1

我完全同意这些观点:这正是我将两者结合在一起的原因。 (即Scala main或Java主要通过Java接口与Scala进行交互,以避免在Java代码中需要进行名称修改。) – 2010-03-04 18:02:29

+0

grrrr,“name mangling”是我当时无法想到的技术词我写了这个,导致我使用了“有趣的名字”这个词。 – 2010-03-04 20:29:46

+0

'@ BeanProperty'注释可以让你的朋友使val和vars更易于被java代码访问。它生成java风格的getFoo和setFoo,您可以从java代码中使用它(尽管scala编译器不会让您从scala代码中访问这些名称)。 – 2010-03-05 16:57:36

1

一般来说,除非是极其特殊的情况,否则我不会得到混合语言项目的前提。 Scala能够(作为一种语言)表达一切Java可以或更多的东西。那么为什么要“将Scala引入Java项目”呢?为什么不写一个pure-Scala项目?

当我说纯斯卡拉,我认为你可能希望引用一个用Java编写的JAR文件。但是对于绝大多数情况,我看到无需在Scala项目中编写 Java代码。

+1

如果你有一个大的应用程序,重写整个事物可能不切实际,因为它是纯粹的scala,尤其是在企业界。但是您可能想要使用Scala编写插入应用程序的新模块。当scala进入现场时,我没有看到任何人主张写大量额外的java代码。 – 2010-03-05 05:15:21

+0

这是一个公平的点。我不得不说,我已经将大多数遗留系统保存为纯Java,但是我们没有一个是庞然大物,并且大多数可能会在3-5年的周期内从头开始重新编写。 – 2010-03-05 09:49:13

+0

Behemoth对于这些类型是一个伟大的词系统,因为它意味着巨大和可怕:) – 2010-03-05 18:44:34