这篇文章主要讲解了“Java8和Scala的面向对象和函数式编程有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java8和Scala的面向对象和函数式编程有什么不同”吧!Scala是一种混合了面向对象和函数式编程的语言。它常常被看作Java的一种替代语言,程序员们希望在运行于JVM上的静态类型语言中使用函数式特性,同时又期望保持Java体验的一致性。和Java比较起来,Scala提供了更多的特性,包括更复杂的类型系统、类型推断、模式匹配、定义域语言的结构等。除此之外,你可以在Scala代码中直接使用任何一个Java类库。输出Java 8以更加函数式的方式实现Scala来实现在Scala中创建集合是非常简单的Java中那样手工添加每一个元素:Scala轻松地创建List(一种单向链表)或者Set(不带冗余数据的集合)Scala中,关键字val表明变量是只读的,并由此不能被赋值(就像Java中声明为final的变量一样)。而关键字var表明变量是可以读写的。Scala的集合有一个重要的特质我们应该牢记在心,那就是我们之前创建的集合在默认情况下是只读的。这意味着它们从创建开始就不能修改。更新一个Scala集合会生成一个新的集合Java中提供了多种方法创建不可修改的(unmodifiable)集合。下面的代码中,变量newNumbers是集合Set对象numbers的一个只读视图:这意味着你无法通过操作变量newNumbers向其中加入新的元素。不过,不可修改集合仅仅是对可变集合进行了一层封装。通过直接访问numbers变量,你还是能向其中加入元素。与此相反,不可变(immutable)集合确保了该集合在任何时候都不会发生变化,无论有多少个变量同时指向它。Java目前还不支持元组Scala提供了名为元组字面量Scala支持任意大小的元组你可以依据它们的位置,通过存取器(accessor) _1、_2(从1开始的一个序列)访问元组中的元素,比如:Scala也提供了对应的数据结构,它采用延迟方式计算数据结构,名称也叫Stream!不过Scala中的Stream提供了更加丰富的功能,让Java中的Stream有些黯然失色。Scala中的Stream可以记录它曾经计算出的值,所以之前的元素可以随时进行访问。除此之外,Stream还进行了索引,所以Stream中的元素可以像List那样通过索引访问。注意,这种抉择也附带着开销,由于需要存储这些额外的属性,和Java 8中的Stream比起来,Scala版本的Stream内存的使用效率变低了,因为Scala中的Stream需要能够回溯之前的元素,这意味着之前访问过的元素都需要在内存“记录下来”(即进行缓存)。Java8的Optional在Scala语言中,你可以使用Option使用Optional类似的方法实现该函数:Scala语言中,你可以直接传递这两个方法给内嵌的filter,如下所示现在,让我们一起审视下内嵌方法filter的函数签名:匿名函数如果用Java,你可以采用下面的方式:闭包闭包是一个函数实例,它可以不受限制地访问该函数的非本地变量。不过Java 8中的Lambda表达式自身带有一定的限制:它们不能修改定义Lambda表达式的函数中的本地变量值。这些变量必须隐式地声明为final。Scala中的匿名函数可以取得自身的变量,但并非变量当前指向的变量值。不过在Java中,下面的这段代码会遭遇编译错误,因为count隐式地被强制定义为final:Java的示例Scala提供了一种特殊的语法可以自动完成这部分工作。该函数的科里化版本如下:由于Scala也是一门 香港云主机完全的面向对象语言,你可以创建类,并将其实例化生成对象。getter方法和setter方法单纯只定义字段列表的Java类,你还需要声明一长串的getter方法、setter方法,以及恰当的构造器。多麻烦啊!Scala语言中构造器、getter方法以及setter方法都能隐式地生成,从而大大降低你代码中的冗余:Scala还提供了另一个非常有助于抽象对象的特性,名称叫trait。它是Scala为实现Java中的接口而设计的替代品。trait中既可以定义抽象方法,也可以定义带有默认实现的方法。trait同时还支持Java中接口那样的多继承,所以你可以将它们看成与Java 8中接口类似的特性,它们都支持默认方法。trait中还可以包含像抽象类这样的字段,而Java 8的接口不支持这样的特性。你可以创建一个Box类,动态地决定到底选择哪一个实例支持由trait Sized定义的操作感谢各位的阅读,以上就是“Java8和Scala的面向对象和函数式编程有什么不同”的内容了,经过本文的学习后,相信大家对Java8和Scala的面向对象和函数式编程有什么不同这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是开发云,小编将为大家推送更多相关知识点的文章,欢迎关注!
这篇文章主要讲解了“数据仓库和Hive环境的搭建方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据仓库和Hive环境的搭建方法”吧!上次介绍了HDFS,本来想进入Mapreduce,但感觉Mapreduce…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。