Scala基础入门-2

简介: 简单类和无参方法 class Counter { private var value = 0 // 必须初始化字段 def increment() { value += 1 } // 方法默认公有 def current() = value }    Scala中的类不声明为public,一个Scala源文件中可以有多个类。

简单类和无参方法

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

  

Scala中的类不声明为public,一个Scala源文件中可以有多个类。

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

  

调用无参方法时,圆括号是可写可不写的。推荐的做法是:如果是会改变对象状态的方法,就带上( );否则,就不带。

如果将方法的声明改为以下形式,那么可以强制不能带( )(下面要提到的getter就是这种风格的,所以调用getter时,必须不带( )):

带getter和setter的属性

在Java中,通常将字段声明为私有的,然后添加公有的getter和setter方法来提供访问字段的接口。像这样拥有一对getter/setter的字段,通常被称为属性(property)。

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

 

class Person {
  var age = 0
}

  

在面向JVM的类中,这个简单的Person类有一个私有的age字段和相应的,公有的getter和setter方法。(如果将age声明为private的,getter和setter方法也是私有的。)Scala中,getter和setter分别叫做age和age_=。

println(fred.age) // 调用方法fred.age()
fred.age = 21 // 调用方法fred.age_=(21)

  

将这个简单的Person编译后,使用javap查看生成的字节码,可以验证这一点。

// -private选项说明显示所有的类和成员
javap -private Person.class

  

public class Person implements scala.ScalaObject {
  private int age;
  public int age();
  public void age_$eq(int); // =号被翻译成了$eq
  public Person();
}

  

知道了这些默认实现后,就可以使用自己的实现来代替默认实现了。

class Person {
  private var privateAge = 0

  def age = privateAge
  def age_=(newValue: Int) {
  	if (newValue > privateAge) privateAge = newValue
  }
}

  

Scala中,字段和getter/setter间的关系,还有其他几种情况。

使用val声明的字段,是只有getter,因为val声明的是不可变的啊。Scala中不能实现只有setter的字段。

还有种对象私有字段。Scala中,方法可以访问该类的所有对象的私有字段,这一点与Java一样。如果通过private[this]来字段来修饰,那么这个字段是对象私有的,这种情况下,不会生成getter和setter。对象私有字段,只能由当前对象的方法访问,而该类的其他对象的方法是无法访问的。如果说分不清楚对象和类的区别,这里就又要犯浑了。

接下来是一种与private[this]相似的访问控制。Scala中可以使用private[class-name]来指定可以访问该字段的类,class-name必须是当前定义的类,或者是当前定义的类的外部类。这种情况会生成getter和setter方法。

Bean属性

使用 @BeanProperty注解来为字段生成符合JavaBeans规范的getter/setter方法。使用该注解后,将会生成4个方法:Scala的getter/setter和JavaBeans规范的getter/setter(如果是val声明,就没有setter部分了)。

 

目录
相关文章
|
4月前
|
分布式计算 Java Hadoop
Scala入门必刷的100道练习题(附答案)
Scala入门必刷的100道练习题(附答案)
255 1
|
4月前
|
Java 大数据 Scala
Scala入门【运算符和流程控制】
Scala入门【运算符和流程控制】
|
4月前
|
Java Shell API
Scala入门【变量和数据类型】
Scala入门【变量和数据类型】
|
6月前
|
安全 Java 编译器
Scala语言入门:初学者的基础语法指南
作为一种在Java虚拟机(JVM)上运行的静态类型编程语言,Scala结合了面向对象和函数式编程的特性,使它既有强大的表达力又具备优秀的型态控制
27 0
|
11月前
|
JavaScript 前端开发 Java
Scala语言入门以及基本语法
Scala语言入门以及基本语法
|
分布式计算 Java 程序员
spark开发基础之从Scala符号入门Scala
spark开发基础之从Scala符号入门Scala
136 0
spark开发基础之从Scala符号入门Scala
|
开发框架 分布式计算 Java
十分钟带汝入门大数据开发语言Scala
Scala是一门多范式的编程语言,一种类似Java的编程语言 ,设计初衷是实现可伸缩的语言 、并集成面向对象编程和函数式编程的各种特性。目前最主流的大数据开发框架Spark的实现就是通过Scala去实现的。Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码),也可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。
十分钟带汝入门大数据开发语言Scala
|
存储 Java 大数据
Scala入门教程(下)
Scala入门教程(下)
205 0
|
大数据 Scala
Scala入门教程(中)
Scala入门教程(中)
130 0
Scala入门教程(中)
|
消息中间件 分布式计算 Java
Scala入门教程(上)
Scala入门教程(上)
430 0
Scala入门教程(上)