Scala和Java在同一个项目中

时间:2016-03-01 10:26:28

标签: java spring scala lift

我可以在同一个项目中使用Scala和Java吗?我是编程新手,所以对我来说有点困惑。

从我的研究中我已经了解到,获得一个好项目的最佳组合是Java / Spring或Scala / Lift的组合。为什么存在这些组合?是不是可以使用Scala with Spring或Java with Lift?

如果我使用Scala,我应该在Scala代码中使用整个配置吗?或者我可以拥有外部资源,因此每次Scala代码都不应该修改。

2 个答案:

答案 0 :(得分:6)

  

问。我可以在同一个项目中使用Scala和Java吗?

当然,你可以。您可以在同一个项目中一起使用大多数基于JVM的语言。

  

问。我该如何解决?

基本思想是配置构建工具以编译Java和Scala代码。例如,如果您使用Maven,则可以使用Maven Scala plugin来编译Scala代码。使用此插件有两种选择:

  1. 默认情况下禁用编译Java代码的Maven Compiler plugin。然后,让Maven Scala插件编译Java和Scala代码。
  2. 继续使用Maven Compiler插件编译Java。配置Maven Scala插件以仅编译Scala代码。
  3. 我更喜欢选项2,因为我发现Scala编译速度很慢(尽管每个新的Scala版本的性能都在稳步提高),因此使用Maven Compiler插件可以缩短整体构建时间。

      

    问。是否无法将Scala与Spring一起使用或Java与Lift一起使用?

    当然,您可以将Scala与Spring和Java一起使用。您可以查看使用Java,Scala和Spring的my sample application

    您会注意到示例应用程序具有用于Java和Scala代码的单独源文件夹,但这不是必需的,可以在Maven配置中进行配置。

      

    问。如果我使用Scala,我是否应该使用Scala代码进行整个配置?

    我假设您的意思是Spring配置。您是否希望使用XML文件,Java类或Scala类配置Spring完全取决于您。所有方法都有效。这取决于你更喜欢哪种风格,更喜欢。

    您甚至可以将配置分布在多个类甚至XML和类的组合上。

答案 1 :(得分:3)

简短回答

更长的答案

Scala和Java一起工作很好。

Scala主编译目标可以编译为在任何JVM上运行的Java字节码。除了运行时兼容性之外,Scala语言本身也支持互操作性。

所以基本的项目设置看起来像

$stmt = $this->conn->prepare("SELECT salt, encrypted_password FROM users WHERE email = ?");

$stmt->bind_param("s", $email);

if ($stmt->execute()) {
    $stmt->bind_result($salt, $encrypted_password);
    if($stmt->fetch()) {
        // verifying user password
        $hash = $this->checkhashSSHA($salt, $password);
        // check for password equality
        if ($encrypted_password == $hash) {
            $user = array();
            $user["salt"] = $salt;
            $user["encrypted_password"] = $encrypted_password;
            // if you want to return all the columns from database
            // then add other lines here
            // like $user["name"] = $name;
            // and make sure you have declared $name in bind_result method
            return $user;
        }
    } else {
        return NULL;
    }
} else {
    return NULL;
}

所有内容绑定在一起取决于您使用的构建系统,即./src /main /scala /java test /scala /java sbtgradle都提供了良好的支持。