Scala中This与Apply的用法

本文详细介绍了Scala中与Java构造方法类似的this方法,以及如何使用this方法为类提供默认参数值。此外,还探讨了Scala中的apply方法,它允许在创建对象时省略new关键字,使得类的实例化更加简洁。通过多个示例,展示了如何根据不同的参数创建对象,并在Person类中应用apply方法进行实例化。
摘要由CSDN通过智能技术生成

一.this方法

  • Scala中有一种方法和JAVA中的构造方法比较相似就是:this方法
//示例
//定义一个student类并传入两个参数
class Student(a:Int,b:Int){

}
object Student{
  def main(args: Array[String]): Unit = {
    //正常情况下,我们创建Student对象时需要传入两个参数,否则就会报错
    val stu1:Student=new Student(1,2)
  }
}

*********************************************************************************************
//那如果当我们有些时候不想传入参数时该怎么操作!
//可以这样做
//还是定义类
//定义一个student类并传入两个参数
class Student(a:Int,b:String){
  //当创建对象时没有传入参数就会进入这个this方法
  //进入后会传入设定好的默认值
  def this(){
    this(1,"2") //默认传入参数a=1,b=2
  }
  //当创建对象时只传入了一个参数a
  def this(a:Int){
    this(a,"2") //默认传入参数a=a,b="2"
  }
  //当创建对象时只传入了一个参数b
  def this(b:String){
    this(1,b) //默认传入参数a=1,b=b
  }

}
object Student{
  def main(args: Array[String]): Unit = {
    //会调用不带参数的this方法
    val stu1:Student=new Student()
    //会调用只带int参数的this方法
    val stu2:Student=new Student(1)
    //会调用只带string参数的this方法
    val stu3:Student=new Student("2")
  }
}

二.Apply方法

//apply可以省去创建对象时的new关键字
class Person(name:String,age:Int){
 	def this(){
 		this("xxx",0)
 	}
 	def this(name:String){
 		this(name,0)
 	}
 	def this(age:Int){
 		this("xxx",age)
 	}
}
object Person{

	//通过定义apply方法可以在创建类对象时,省区new关键字
	//四种情况:前三种需要创建对应的this方法,当然也可以在apply函数中为创建对象设置默认值
	def apply():Person=new Person()
	def apply(name:String):Person=new Person(name)
	def apply(age:Int):Person=new Person(age)
	def apply(name:String,age:Int):Person=new Person(name,age)
	
	def main(args:Array[String]):Unit={
	//只要定义上面的apply方法,那么对应的省略new创建对象都是可以实现的
		val p1=Person()
		val p2=Person(name)
		val p3=Person(age)
		val p4=Person(name,age)
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值