博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(二)scala构造器和伴生对象
阅读量:4504 次
发布时间:2019-06-08

本文共 2355 字,大约阅读时间需要 7 分钟。

构造器的使用

调用apply方法时.apply可以省略

object Hello{	def main(args:Array[String]){		//println("hello world")				val m1 = new Man("Zhangsan")		    //   会报错    //   m.apply("zhu")		val list = List("aa", "bb")		//调用的是伴生对象中的apply		val m2 = Man("Wangwu")		println("000000000000000000000");		//调用的是class中的apply		m2("liu", 33)	}}//如果没有显示定义构造方法,编译器会分配一个默认的(不带参数)主构造器//主构造器跟在类名后面class Man(var name:String){  //被主构造器调用    //println(name)  var id:Int = 0  var age:Int = 0    //辅助构造器,第一行代码必须是对主构造器或者另外一个辅助构造器的调用  def this(name:String, id:Int){    this(name)    this.id = id  }    def this(name:String, id:Int, age:Int){    this(name,id)    //this.id = id    this.age = age  }  //  def apply(name:String,id:Int): Unit = {//    println("Unit")//  }  //也可以返回list//  def apply(  name: String,id:Int): List[String] = List("ds","werfew")   def apply(name:String,id:Int):Man= new Man(name,id)}object Man{  def apply(name:String): Man = {    new Man(name,id)//    println("object Man")// def apply(name:String):Man = new Man(name)}

apply方法的使用

object apply {  def main(args: Array[String]): Unit = {    val anyObject = new SomeClass    println(anyObject("key1"))        val ss = SomeClass("aa")    println(ss)        val email = EMail("fantasia", "sina.com")    println(email)    val email2 = new Email    email2("Test")  }}class SomeClass {    println("SomeClass ........");    def apply(key: String): String = {        println("SomeClass apply()" + key)        key    }}object SomeClass{  def apply(a:String){    println("SomClass object apply()" + a)  }}class Email{  def apply(x:String){    println("Email apply");    println(x);  }}object EMail {    def apply(user: String, domain: String): String = {        println("Email Object apply()")        user + "@" + domain    }}

154341_fCZM_3746673.png

 

unapply的使用

object Apply_unapply {    def main(args: Array[String]): Unit = {    val currency = Currency(30.2, "EUR")    currency match {      case Currency(amount, "USD") => println("$" + amount)      case _ => println("No match.")    }  }}class Currency(val value: Double, val unit: String) {}object Currency{  def apply(value: Double, unit: String): Currency = new Currency(value, unit)    def unapply(currency: Currency): Option[(Double, String)] = {    if (currency == null){      None    }    else{      Some(currency.value, currency.unit)    }  }}

 

 

 

转载于:https://www.cnblogs.com/apppointint/p/8885293.html

你可能感兴趣的文章
pycharm中添加PATH变量
查看>>
pytorch中,不同的kernel对不同的feature map进行卷积之后输出某一个channel对应的多个feature map如何得到一个channel的feature map...
查看>>
IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程
查看>>
动态规划~~矩阵链乘法
查看>>
Leetcode N-Queens II
查看>>
CodeForces 721C Journey(拓扑排序+DP)
查看>>
【概率论】3-7:多变量分布(Multivariate Distributions Part I)
查看>>
常用PY库
查看>>
排序 之 堆排序 归并排序
查看>>
linux查看修改线程默认栈空间大小(ulimit -s)
查看>>
BZOJ 1477 青蛙的约会 【扩展欧几里得】
查看>>
用phpexcelreader将excel文件读入到mysql中(转载)
查看>>
As3 Socket高低位
查看>>
15. 三数之和
查看>>
使用angular.js获取form表单中的信息
查看>>
TestNG
查看>>
高精——模板
查看>>
生成CFree 5.0 注册码
查看>>
磁力链接
查看>>
【问题解决方案】之 关于某江加密视频swf专用播放器仍无法播放的问题
查看>>