我刚开始使用Scala,想知道如果Scala真的可以与Java互操作,为什么他们有自己的库,而不仅仅使用Java库?
换句话说,在Scala中编写Java中已有的相同库有什么好处吗?
接下来,两者都被转换为字节码并在JVM上运行。
如果您阅读scala文档
Scala将面向对象(OOP(和函数式编程(FP(结合在一起简洁、高级的语言。
-
在我看来,scala获得了JVM市场,因为java在java8之前只是OO;而您可以在scala中同时执行OO+fp
-
由于fp鼓励诸如不变性之类的思想,所以使用相同的Java库并不理想,因为Java没有提供不变性,或者没有实践。
这就是为什么您会看到工程师使用惯用的scala重新编写或移植JVM库;也称为纯fp,而不是调用不纯代码。
下面是标量不变性的例子;
scala> case class Customer (name: String)
defined class Customer
scala> val customer = Customer(name = "Stephen")
customer: Customer = Customer(Stephen)
scala> customer.name = "Lino"
<console>:13: error: reassignment to val
customer.name = "Lino"
^
java10现在提供了一些不可变的数据结构,如List
、Map
;
使用final
的java不可变示例;
jshell> class Customer { final String name = "default customer"; }
| created class Customer
jshell> var customer = new Customer()
customer ==> Customer@887af79
jshell> customer.name = "Lino"
| Error:
| cannot assign a value to final variable name
| customer.name = "Lino"
| ^-----------^
Twist:由于java的功能越来越强大,我不知道scala会用他们的OO+FP哲学做什么