scala 中 与类相关操作

简单类和无参方法

Scala类最简单的形式看上去和Java中的很相似

class Counter {
   
	private var value = 0 //字段必须初始化
	def increment() {
     //方法默认是公有的
		value += 1  
	}
	def current() = value
}

Scala中类并不申明为public。Scala源文件可以包含多个类,所有这些类都具有公有可见性。

使用类要做的是构造对象并按照通常的方法来调用方法:

val myCounter = new Counter //或new Counter()
myCounter.increment()
println(myCounter.current) //或myCounter.current()

使用哪种风格?对于改变对象状态的方法,使用()。而对于不会改变对象状态的方法去掉()。

可以通过以不带()的方式申明current来强制这种风格:

class Counter {
   
	...
	def current = value //定义中不带()
}
//用此方法定义,使用者就必须使用myCounter.current。不能带圆括号

带getter和setter的属性

之所以说getter和setter方法比共有字段更好,是因为他们让你可以从简单的get/set机制出发,并在需要的时候做改进。

Scala对每个字段都提供getter和setter方法。

class Person {
    //定义一个公有字段
	var age = 0
    private var name = ""
}

scala生成面向jvm的类,有一个私有的age字段及相应的getter和setter方法。方法是共有的。(对私有字段而言,getter和setter方法也是私有的。)

scala中,getter和setter分别叫做age和age_=。

println(fred.age) //调用fred.age()
fred.age = 21 //调用fred_=(21)

编译命令:

$ scalac Person.scala
$ javap -private Person
# 在REPL内运行javap命令
:javap -private Person

自定义getter和setter方法:

class Person {
   
	private var privateAge = 0 //变为私有并改名
	
	def age = privateAge
	def age_=(newValue:Int){
   
		if(newValue > privateAge) privateAge = newValue
	}
}
//依然可以访问fred.age
val fred = new Person
fred.age = 30
fred.age = 21
println(fred.age) //30

统一访问原则:某个模块提供的所有服务都应该能通过统一的表示法访问到,至于它们是通过存储还是通过计算来实现的,从访问方式上应无从获知。

Scala对每个字段生成getter和setter方法,可以进行控制。

  • 如果字段是私有的,则getter和setter方法也是私有的
  • 如果字段是val,则只有getter方法被生成。
  • 如果你不需要任何getter和setter,可以将字段声明为private[this]

只带getter的属性

有时只需一个只读属性,有getter没setter。如果属性的值在对象构建完成后就不再改变,可以使用val字段:

//生成私有的final字段和一个getter方法,但没有setter
class Message 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值