java调用scala 伴生类_Scala 单例对象、伴生对象、apply方法 | LouisvV's Blog

单例对象:

在Scala中,没有静态方法或静态字段,为了达到同样目的,Scala中使用单例对象,以object关键字定义,单例对象为程序的执行提供入口点

单例是一种只能有一个实例的对象

单例对象的成员、方法都默认是静态的,可以全局访问,共享全局变量很有意义

单例对象还可以扩展类和性状

与类不同的是,单例对象没有参数,单列对象可以拥有类的所有特性

需要注意的是,单例对象会在第一次被访问的时候初始化

伴生对象:

当一个单例对象与类具有相同的名称时,这个单例对象被称作是这个类的伴生对象,同样,这个类被称作是这个单例对象的伴生类

类和它的伴生对象可以互相访问私有特性,类和它的伴生对象必须定义在同一个源文件中

独立对象:

当一个单例对象没有与类具有相同的名称,这个单例对象被称作是独立对象。

独立对象一般作为Scala应用的入口点,或相关功能方法的工具类

apply方法:

通常,在一个类的伴生对象中定义apply方法,在生成这个类的对象时,就省去了new关键字

apply方法主要用来解决复杂对象的初始化问题

Scala的apply有两种方式,一种是伴生类的apply,另一种是伴生对象的apply

下面举几个简单的例子来说明:

单例对象:

/**

* 单例对象

*/

object Student {

private val name:String="tom"

def getName: Unit ={

println("My name is "+name)

}

}

object Init{

def main(args: Array[String]): Unit = {

// 直接调用Student的getName方法即可

Student.getName

}

}

结果:

My name is tom

伴生对象:

// 伴生类

class Student(var name: String,var address: String) {

// 学校

private val school = "no.1 middle school"

// 调用伴生对象的私有成员

def getID: Unit ={

println("获取伴生对象的私有成员"+Student.id)

}

}

// 伴生对象

object Student {

// 学号

private var id:Int=1

def main(args: Array[String]): Unit = {

// 实例化对象tom

val tom =new Student("tom","北京")

// 获取伴生类的私有成员school

println("获取伴生类的私有成员"+tom.school)

// 获取伴生对象的私有成员id

tom.getID

println("我叫"+tom.name+",住在"+tom.address+",在"+tom.school+"上学,"+"学号是"+id)

}

}

结果:

获取伴生类的私有成员no.1 middle school

获取伴生对象的私有成员1

我叫tom,住在北京,在no.1 middle school上学,学号是1

apply

// 伴生类

class Student(var name: String,var address: String) {

// 学校

private val school = "no.1 middle school"

// 调用伴生对象的私有成员

def getID: Unit ={

println("获取伴生对象的私有成员"+Student.id)

}

}

// 伴生对象

object Student {

// 学号

private var id:Int=1

// 定义apply方法,实例化伴生类

def apply(name: String, address: String): Student = new Student(name, address)

def main(args: Array[String]): Unit = {

// 通过伴生对象的apply方法创建实例

val jerry=Student("jerry","上海")

println("获取伴生类的私有成员"+jerry.school)

jerry.getID

println("我叫"+jerry.name+",住在"+jerry.address+",在"+jerry.school+"上学,"+"学号是"+id)

}

}

结果:

获取伴生类的私有成员no.1 middle school

获取伴生对象的私有成员1

我叫jerry,住在上海,在no.1 middle school上学,学号是1

伴生类与伴生对象的apply

class ApplyTest {

def apply() = println("这是伴生类的apply方法")

}

object ApplyTest {

def apply() = {

println("这是伴生对象的apply方法")

new ApplyTest

}

}

// 独立对象,作为程序入口

object ApplyInit{

def main(args: Array[String]): Unit = {

// 通过伴生对象的apply方法,进行实例化

val applyTest=ApplyTest()

// 这是伴生类的apply方法

applyTest()

}

}

结果:

这是伴生对象的apply方法

这是伴生类的apply方法

5+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值