Scala语言基础(五)apply方法

applay内部实现

先定义一个数组,通过数组来理解apply方法

val array1 = Array(1,2,3,4,5,6,7,8,9)

由源码可以知道,上面定义的数组调用了apply方法,内部同样也new了一个数组,然后通过for循环将值赋给定义的数组,这样就省去了我们一个一个的为数组赋值了

def apply(x: Int, xs: Int*): Array[Int] = {
    val array = new Array[Int](xs.length + 1)
    array(0) = x
    var i = 1
    for (x <- xs.iterator) { array(i) = x; i += 1 }
    array
  }

同理,如果我们定义一个类,其构造器私有,这时只有伴生对象能够访问伴生类的构造器,我们就可以通过伴生对象来获得伴生类的对象


object ApplyTest {
  def main(args: Array[String]): Unit = {
    val array = new Array[Int](10)
    val dog = new Dog("小黄", 18)//构造器被私有,除伴生对象外的组件是不能创建对象的
    //由于Dog类的构造器私有了,所以通过访问伴生对象的apply方法获得对象
    val dog = Dog("小黑",18)
    println(dog.name)

  }
}
//类的构造器被私有,只有其伴生对象能访问
class Dog private(val name:String, val age:Int){

}
//伴生对象
object Dog{

  def apply(name: String, age: Int): Dog = {
    new Dog(name, age)//最后一行为返回值,scala中不需要return关键字
  }
}

总结:
1,至少我们知道,但看语法情况下,当类的构造器被私有,可以不用new关键字,获得类的对象,当然前提是,伴生对象有apply方法返回其伴生类的对象

App

/**
 * App是应用程序对象,这个类必须是object不能是class
 * 测试时不需要定义main方法,就能执行程序
 *
 * App中定义了main方法的执行逻辑,把自定义的object类中{}中所有代码直接放在main方法中执行
 * 由于main方法中我们可以传参,现在我们命令行执行代码包时就不能传参了
 */

object ApplyTest extends App {
  println("hello scala")//当单例对象继承了App后,不用在main方法中就能执行程序
}

object Dog{//必须在main方法中才能执行程序
  def main(args: Array[String]): Unit = {
    println("hello scala")
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值