范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Scala的构造函数及和Java的区别

  让我们从一个熟悉的Java的例子开始。
  假设有一个Person类,包括名字和国籍两个字段。那么在Java里我们会这么写:
  class Person {
  private String name;
  private String country;
  public Person(String name, String country) {
  this.name = name;
  this.country = country;
  }
  }
  相对应的Scala代码最简化的样子可以这么写:
  class Person(name: String, country: String)
  这里不再提老生重谈的代码行数问题。而是讲讲里面的设计哲学。简洁性
  第一个点,我认为作者对于"简洁"这个点是有狂热的追求的,《Programming in Scala》一书中反复提到"concise"这个词,光前6章,就有26次之多!
  为了实现简洁性,我们假设,大家都更多的使用不可变数据结构,那么这个name和country相当于都是final的,而且,不可变数据结构的初始化需要一次性完成,那么最简单的实现就是一个所有字段都塞在构造器中。
  那么Java代码中的这句:public Person(String name, String country)就可以去掉了,其实我们把public替换成class,把变量类型放在变量的后面,就是Scala的写法了。 封装
  面向对象,或者说编程最重要的点(没有之一)就是封装。
  在刚才的例子中,假设已经实例化了一个Person对象,我们叫p好了。实际上,我们无法通过p.name直接访问对应的名字,因为在Person这个类中,其实并没有name这个字段。
  刚才的写法和Java只是等价,并不是等同。
  如果要访问name,比如在toString里面打印出来,是可以的,但是直接访问不行。
  我认为这样的设计,更符合封装的要求。也就是说,外界没理由直接访问name字段,如果要访问,则通过方法调用来实现。
  这样的name字段被称为class parameter。相对的,其实我们也可以在类中定义name和country两个真正的字段。不过这样的话,和Java的繁琐程度倒是区别不大了。主构造函数
  在Scala中,是有主构造器(primary constructor)这样的说法的,来看看Martin怎么说:
  The Scala compiler will compile any code you place in the class body, which isn"t part of a field or a method definition, into the primary constructor.
  也就是说,在类的结构体里面,除了字段和方法,其他的所有代码,都会被当做主构造器。这一点和Java有很大的区别。
  在Java中,如果有多个构造器,我们不会明确的区分主次。
  比如如果我们有一个新的构造函数,当没有输入国家时,默认用中国作为国籍。我们可以这么写:
  public Person(String name) 辅助构造函数
  当然,在Scala中,我们也可以定义辅助函数,只不过在语法上,必须通过def this(…)这样的形式来写。
  这里有一个很大的差别是,辅助构造函数,必须只能调用其他辅助构造函数或者主构造函数。  甚至连调用父类的构造函数也不行。
  因此,我们说:主构造函数,是进入一个类的唯一入口。
  其中的取舍,还是为了最开始提到的"简洁性"。

微星宙斯盾Ti5精致又朋克的顶配核弹很多人好奇DIY主机电商主机和高度定制化的品牌主机有什么不同。如果是多年以前,我想说区别不大。绝大多数的电商PC主机,和DIY主机的区别在于是你自己装,还是卖家帮你装。早些年的品牌PK戴森V10轻量版?米家轻羽无线吸尘器体验(附详细对比)吸尘器几乎已经成为新房入住后的刚需,但存在的形态随着时代发展始终在变化。这台是我装修时使用的工业吸尘器皮实的外观桶装水一般的体积装修界的劳模家庭收纳的噩梦。除了体积巨大,它还有接近拼多多联合30余家出版社启动多多读书月3月31日,拼多多启动多多读书月活动,联合中信出版社知识出版社青岛出版社磨铁图书果麦文化等30余家出版社及图书出版公司等,针对社科文艺教辅等多个类目超过1000款图书进行百亿补贴大能稳定11追踪么,雷蛇毒蝰终极版DPI测试不久之前,我们针对巴塞利斯蛇终极版做过DPI的测试,通过直观的数据看到了固件升级前后的明显变化,修复了50dpi的BUG同时也验证了雷蛇11算法的有效性,让FOCUS引擎更加成熟。德系电竞鼠标ENDGAMEXM1的dpi稳定性测试ENDGAMEGEAR是个来自德国的新品牌,以满足欧美职业选手的电竞需求为己任,起点比较高也和国内传统的外设品牌的运营思路不同。XM1是首款产品,轻量化设计兼顾良好的握感和操控性,润滑低噪但尚缺稳定,贱驴打滚619RS大键测试翻翻发布历史,我们有许久没更新键盘的测试报告了,这次为大家测一个挺特别的机械键盘,不但名字特别,而且设计和手感也有自己的个性之处,它是贱驴619RS机械键盘。它采用佳达隆新的CAP高品质键帽下的沉稳配色,图解LeopoldFC660MPD机械键盘FC660M是Leopold推出的一款特殊配列键盘,受实用性所限名气没有FC980M那样高,但在小键盘爱好者群体中却有着极好的口碑。也因为体积最小,在Leopold系列键盘中售价也有脑有心有力WEY摩卡预售火爆进行中4月19日,WEY品牌全球代言人WEY摩卡首席智能体验官姚安娜,空降上海车展智动WEY来摩卡专属日,携手全球首款智能汽车人WEY摩卡,为现场粉丝呈现了车展史上自动驾驶走秀,书写了其有脑有心有力WEY摩卡预售火爆进行中4月19日,WEY品牌全球代言人WEY摩卡首席智能体验官姚安娜,空降上海车展智动WEY来摩卡专属日,携手全球首款智能汽车人WEY摩卡,为现场粉丝呈现了车展史上自动驾驶走秀,书写了其矿视界译文采用比特币作法币的萨尔瓦多现在怎样了?6月9日,萨尔瓦多宣布采用比特币作为其法定货币的消息在世界范围内引起了不小的轰动。比特币占领了它的第一个国家,这让比特币支持者们激动万分这对比特币来说意义重大!比特币在现实世界里建矿视界译文为什么市场对EIP1559如此兴奋?以太坊开发人员提出了一项解决网络gas费过高的提案,这项市场普遍叫好的提案,却让以太坊矿工怨愤不已。以太坊的性能瓶颈以太坊六年的发展历史见证了它在加密世界中的龙头地位,但这种主导地
三星发布S20系列新机和ZFlip,开手机8K录像先河三星于北京时间2月12日凌晨一口气甩出了GalaxyS20系列及ZFlip等多款新机其中今年的重磅旗舰新品S20系列共有三个型号,分别为GalaxyS205GS205G和S20UlCES2020微星展馆一览,从游戏到内容创作者系列产品应有尽有作为游戏硬件和计算解决方案的品牌,微星在CES2020上展出了屡获殊荣的游戏和内容创建者系列产品,涵盖笔记本电脑,台式机,显示器和DIY组件产品,包括世界上第一台真正的台式杀手级游把命交给自动驾驶?理想ONE车主高速躺平玩手机最近,理想汽车的瓜实在有些多。闹得沸沸扬扬的水银门和生锈门还未有定论,一位理想ONE车主躺着开车的视频又引发了网友的热议,可谓是一波未平一波又起。从这位理想车主上传的视频可以看到,落户北京,明年见?小米造车要跟特斯拉比速度近日,有消息人士称,小米汽车已经基本确认总部和首座工厂落户北京。从今年3月底,雷军正式官宣进军智能电动汽车行业后,关于总部和工厂选址的问题就一直是网友讨论的重点。各种传闻甚嚣尘上,体积小散热强AOHi65WGaN氮化镓充电头使用体验手机厂商的快充需求促进了快充品牌与设备的发展,经过多轮产品轮换,目前最受欢迎的就是传说中的氮化镓GaN充电头了。什么是GaN氮化镓是一种新型半导体材料,具有禁带宽度大热导率高耐高温平价降噪好声音DacomTinyPodsANC使用评测随着苹果发布了airpods,国产耳机厂商在真无线蓝牙耳机产品线有了长足的发展,不得不说有些品牌推出的高性价比产品值得一试。今天评测的产品就是Dacom大康旗下的一款真无线降噪耳机一个月5千算不算多?我个人认为一个月5千真的不多,就拿我来说吧,5千真的不够!1。一个月5千如果是我自己花的话就可以,但是我觉得还不够为什么这么说呢?因为我要养一家人,父母一个月就给他们一两千,还有老智能电动汽车又来搅局者重塑汽车产业链,芯片公司将如何搅局?文东篱车企要从骨子里头改变,这句话说起来容易,做起来难。清华大学汽车产业与技术战略研究院院长赵福全在某次闭门会议上表示,渐进式的创新一定不适合于除了联手华为,车二代阿维塔们能不能走出自己的路?这一波新造车的浪潮,或许是留给车企的最后的时间窗口。文东篱汽车行业的未来机遇深藏在电动化智能化网联化共享化等浪潮之中,而中国正成长为全球汽车业电动化与智能化的领跑者。四五年前,李斌12。99万元起BEIJINGEU5PLUS正式上市新车上市近日,BEIJINGEU5PLUS正式上市,新车依旧定位为纯电动轿车,全系有416km501km两种续航里程版本共四款车型可选,售价区间为12。9914。99万元。此外,官同城货运,自动驾驶新战场?技术落地加速,政策何时赶上?文Toretto自动驾驶行业的商业化步伐没有停下来过。9月9日,自动驾驶公司文远知行WeRide发布中国首款L4级自动驾驶轻客(WeRideRobova