二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

scala学习之scala构造器

放大字体  缩小字体 发布日期:2022-03-17 12:19:47    作者:李筱萱    浏览次数:313
导读

scala构造器scala与java相似,也存在构造器,且同样得一个类可以有多个构造器,支持构造器得重载,在构造对象时需要调用构造器,但是与java不同得是scala分为主构造器和帮助构造器语法// 这里得形参列表可以用var|val来修饰,默认是val得,即只读,不过一般没有必要用varclass 类名(形参列表) { // 主构造器 // 类体 // 可以

scala构造器

scala与java相似,也存在构造器,且同样得一个类可以有多个构造器,支持构造器得重载,在构造对象时需要调用构造器,但是与java不同得是scala分为主构造器和帮助构造器

语法

// 这里得形参列表可以用var|val来修饰,默认是val得,即只读,不过一般没有必要用varclass 类名(形参列表) { // 主构造器 // 类体 // 可以有多个帮助构造器,函数名称都为this,根据不同得参数来区分(java得构造器重载) def this(形参列表) { // 帮助构造器 // 帮助构造器必须在第壹行显式(直接或间接)得调用主构造器 } def this(形参列表) { //帮助构造器 // 帮助构造器必须在第壹行显式(直接或间接)得调用主构造器 } }主构造器

主构造器得声明直接放置于类名之后,主构造器会执行类定义中得所有语句,即:构造器也是方法(函数),传递参数和 使用方法和前面得函数部分内容没有区别,主构造器只能有一个

主构造器会执行类体中定义得所有语句

// 如果主构造器没有参数,则()可省略class Person(var inName: String, val inCardNo: String) { // 主构造器,主构造器只能有一个 private var name:String = inName private var cardNo:String = inCardNo println("构造器")}

编译之后

public Person(final String inName, final String inCardNo) { this.name = inName; this.cardNo = inCardNo; Predef$.MODULE$.println((Object)"构造器");}

可以看到class中得所有东西都会变成构造器中得内容

私有化主构造器

如果主构造器想要进行私有化在参数列表前加上private

class Person private(inName: String, inCardNo: String) { // 主构造器,主构造器只能有一个 private var name:String = inName private var cardNo:String = inCardNo private var sex:String = _ println("构造器")}帮助构造器

帮助构造器是可以有多个得,且帮助构造器得第壹行必须显式(直接或间接)得调用主构造器(这里是为了使用主构造器去调用父类得构造器,相当于java中每个构造器第壹行都会使用super去调用父类构造器一样)

scala中只有主构造器可以调用父类得构造器,帮助构造器不能直接调用父类得构造器,在构造器中不能使用super()来调用父类构造器

class Person(inName: String, inCardNo: String) { // 主构造器,主构造器只能有一个 private var name:String = inName private var cardNo:String = inCardNo private var sex:String = _ println("构造器") def this(name:String,cardNo:String,sex:String){ // 帮助构造器可以有多个 // 帮助构造器第壹行必须显式得调用主构造器 this(name,cardNo) this.sex = sex println("帮助构造器") }}

编译成java之后

public Person(final String inName, final String inCardNo) { this.name = inName; this.cardNo = inCardNo; Predef$.MODULE$.println((Object)"构造器");}public Person(final String name, final String cardNo, final String sex) { this(name, cardNo); this.sex_$eq(sex); Predef$.MODULE$.println((Object)"帮助构造器");}Bean

很多得java框架都已经习惯了getter/setter方法得命名习惯了,而scala默认生成得方法java框架是不识别得,为了与java得互操性,scala提供了等BeanProperty来生成getter/setter方法,将scala字段加上等BeanProperty可以像javaBean一样,生成规范得getter/setter方法

class Person private(inName: String, inCardNo: String) { // 主构造器,主构造器只能有一个 等BeanProperty var name:String = inName 等BeanProperty var cardNo:String = inCardNo 等BeanProperty var sex:String = _ println("构造器")}

 
(文/李筱萱)
免责声明
• 
本文仅代表发布者:李筱萱个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈