文档章节

Scala 学习笔记(5)

 大胖和二胖
发布于 2016/08/12 10:43
字数 749
阅读 41
收藏 0

一、类

class SimpleClass {
  var value = 0
}

val c = new SimpleClass

上面定义了一个简单的类,看起来和java里面并没有多大不同。这里还涉及到另一个问题,如果一个方法没有参数,后面的()是可要可不要的。

二、getter and setter

还是上面那个类,我们看一下它编译出来的class文件长什么样子,value属性变成了private的,而生成了2个方法,虽然跟java的get&set长得不太一样,但是其实性质是一样的。特殊之处在于, value_$eq ,这个$eq代表的是=,因为java当中=不能出现在方法名当中,所以用 $eq 代替。

public class SimpleClass
{
  private int value = 0;

  public int value() { return this.value; }
  public void value_$eq(int x$1) { this.value = x$1; }

}

这个时候,可以正常的访问这个属性

    val c = new SimpleClass
    c.value = 100
    val tmp = c.value

三、只有getter

val onlyget = 100

对应的java代码

  private final int onlyget = 100;

  public int onlyget() {
    return this.onlyget;
  }

四、对象私有

scala里面有private,这一点和java当中的含义是相同的,不同的是,scala当中还有private[this]。先看这段代码,这样的代码是没有问题的。

class SimpleClass {
  private var value = 0
  def < (that : SimpleClass) = this.value < that.value
}

如果改成下面的样子,问题就出现了,that.value是无法编译通过的。private[this]意味着仅对当前对象,也就是this有效。

class SimpleClass {
  private[this] var value = 0
  def < (that : SimpleClass) = this.value < that.value
}

五、Bean属性

我们还可以构建更加java化的get和set,注意 import scala.beans.BeanProperty 是必须的

import scala.beans.BeanProperty

class SimpleClass {
  @BeanProperty var value = 0
}

调用方法

    val c = new SimpleClass
    c.getValue()
    c.setValue(20)
    c.value = 234
    val tmp = c.value

java代码

  private int value = 0;

  public int value() { return this.value; }
  public void value_$eq(int x$1) { this.value = x$1; }
  public void setValue(int x$1) { this.value = x$1; }
  public int getValue() { return value(); }

六、主构造函数

首先是Scala代码,Scala代码的构造函数和java相比更加紧凑,书写更加简单

class SimpleClass(name : String) {
}

调用方法

val c = new SimpleClass("bajie")

java代码

public class SimpleClass
{

  public SimpleClass(String name)
  {
  }
}

这里有几条规则,可以自己去进行实验

1、如果构造函数当中的参数,带有val或var修饰符,它天然的被当做类当中的一个属性,也会按照之前的规则来生成get和set方法

2、如果构造函数当中的参数,没有val和var修饰符,它仅仅是一个参数,但是当他在class当中被至少一个方法使用的话,它将会升格为一个属性。

七、从构造函数

这里还有一个规则,每一个从构造函数,都必须以之前的某个从构造函数或者是主构造函数开始。换句话说,只有主构造函数可以调用其父类的构造函数。这一点是与java不同的。

class Person(name : String) {
  var name = "";
  var age = 0;
 
  def this(name : String, age: Int){
    this(name)
    this.age = age
  }
}

八、内部类,与java的内部类概念接近,这里不再赘述。

© 著作权归作者所有

粉丝 23
博文 69
码字总数 50842
作品 0
沈阳
架构师
私信 提问
Scala 学习笔记 模式匹配

1. 模式匹配简介 模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函数和偏应用函数、Scala学习笔记(七) Sealed Class 和 Enumeration都是为了这一篇而铺垫准备的...

Tony沈哲
2017/05/16
0
0
Scala学习笔记-基础语法

Scala学习笔记-基础语法 OneCoder2016-09-2046 阅读 Scala 上手学习Scala语言。先熟悉一下语法。对于Scala笔者也是完全的新手,对scala的设计思想和实现原理没有太多了解。错误在所难免,还望...

OneCoder
2016/09/20
0
0
Scala学习笔记 - 函数

Scala学习笔记 - 函数 OneCoder2016-09-2157 阅读 Scala Scala做为支持函数式编程的语言,函数自然是其核心的特性,因此笔者对函数部分的学习自然会更加认真细致一些。但也仅仅是基础部分。 ...

OneCoder
2016/09/21
0
0
zeppelin入门介绍视频

Zeppelin 1. 缘起 各位朋友们,有一段时间没有更新内容。因为最近一直也比较忙,有些计划也就搁置了。 最近在非技术领域有一些感悟,也有一些收获,因此发起做些视频教程的心。 这是我录制的...

云戒
2017/08/30
0
0
scala学习笔记

1.lazy 惰性计算 惰性 求值 特别用于 函数式编程语言 中。在使用延迟求值的时候,表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值 。 除可以得到性能的提升外,惰性计算...

cjun1990
2015/09/10
123
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部