java - Java 应用程序的哪些部分应该用 Scala 编写?

标签 java scala interop

我正在使用 Struts 2 编写一个 Java 应用程序,但现在我想将它变成一个 Java 和 Scala 的混合项目。我没有太多使用 Scala 的经验,但我几年前在大学里学过 Haskell —— 我真的很喜欢函数式编程范式,但当然在类里面我们只会遇到非常适合函数式解决方案的问题!在现实世界中,我认为有些代码更适合命令式风格,为此我想继续使用 Java(我知道 Scala 支持命令式语法,但我还没有准备好朝着纯 Scala 项目的方向发展刚刚)。

在混合项目中,如何决定什么用 Java 编码,什么用 Scala 编码?

最佳答案

两件事:

  1. 99%的Java代码都可以用Scala表达
  2. 您可以编写支持 Java+Scala 混合编译的项目。你的 Scala 代码可以调用你的 Java 代码,你的 Java 代码也可以调用你的 Scala 代码。 (如果你想做后者,我建议在 Java 中定义接口(interface),然后在 Scala 中实现它。否则,从 Java 调用 Scala 代码会变得有点难看。)

所以答案是:任何你想要的部分。您的 Scala 代码不需要是纯函数式的。您的 Scala 代码可以调用 Java 库。因此,几乎任何可以用 Java 编写的部分也可以用 Scala 编写。

现在,一些更实际的考虑。当第一次尝试 Scala 时,有些人会选择他们程序中相对孤立的、非关键任务的部分来用 Scala 编写。如果您喜欢这种方法,单元测试是一个不错的选择。

如果您熟悉 Java 并且过去学习过 Haskell,我建议您将 Scala 视为“更好的 Java”。从根本上说,Scala 编译成与 Java 输出非常相似的 JVM 字节码。唯一的区别是 Scala 更“高效”:它每行代码产生的字节码比 Java 多。 Scala 与 Haskell 有很多共同点(一流的函数,for-comprehensions 就像 Haskell 的 do-notation,有限的类型推断),但它也有很大的不同(默认情况下它不是惰性的,它不是纯粹的)。因此,您可以使用 Haskell 的一些见解来激发您的 Scala 风格,但“在幕后”它全是 Java 字节码。

关于java - Java 应用程序的哪些部分应该用 Scala 编写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452568/

相关文章:

java - 如何部分下载谷歌驱动器文件?

java - Spring 3 MVC 与带注释的 DWR 集成

java - 使用 Java Swing 读取 "alternative"键

scala - sbt.ResolveException Unresolved 依赖关系

c# - C# 中的 4 位枚举

java - 如何从程序中停止运行

scala - `++` - 两个数组上的运算符在使用类型参数时返回 ArraySeq

scala - Scala 中的上下文边界和模式匹配

c# - 打开带附件的默认电子邮件程序 (C#)

c# - 如何调试 C# 托管/非托管编码异常?