java中的单例模式都很熟悉了:简单地说就是一个类只能有一个实例。在scala中创建单例对象非常简单,创建类时使用object关键字替换class即可。因为单例类无法初始化,所以不能向它的主构造函数传递参数。 下面是一个单例的示例: 其中的MarkerFactory就是一个单例。单例 ...
前面两节学了scala的对象和伴生对象,这两个在使用的时候很有些java的静态成员的意思。 scala中没有静态字段和静态方法。静态成员会破坏scala所支持的完整的面向对象模型。不过可以通过伴生对象实现对scala的类一级的操作。 回过头来再看一遍那个Marker的例子,略做了一些调整: 在调整后的代码里,使用def关键字为Marker对象声明了一个primaryColors方法,这个方法返回了 ...
2016-06-20 22:35 0 7481 推荐指数:
java中的单例模式都很熟悉了:简单地说就是一个类只能有一个实例。在scala中创建单例对象非常简单,创建类时使用object关键字替换class即可。因为单例类无法初始化,所以不能向它的主构造函数传递参数。 下面是一个单例的示例: 其中的MarkerFactory就是一个单例。单例 ...
除了推演变量的类型,scala也会推演方法的返回类型。不过这里有一处需要注意:方法返回类型的推演依赖于方法的定义方式。如果用等号“=”定义方法,scala就会推演方法返回类型;否则,它就认为方法的返回为void。看一个例子: 其中方法一是按照习惯方式定义的,方法二则是使用等号定义 ...
假定要在一个方法中返回多个值。比如需要返回一个人的名、姓和邮箱地址。在Java中最常用的方法是定义一个Person类,其中包括相对应的字段;还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循环取值。在Scala中我们又多一个选择:元组。 元组是一个不可变的对象序列,可以使用逗号分隔的值 ...
在Java中是可以使用变长参数的,如下面的方法: 在scala中也可以使用变长参数。和java一样,也是只有最后一个参数可以接收可变长度的参数。使用方式是在参数类型后使用特殊符号“*”,如下面的max()方法: foldLeft是TraversableOnce类的一个方法 ...
Any 前面已经有两次提到过:在scala中,Any类是所有类的超类。 Any有两个子类:AnyVal和AnyRef。对应Java直接类型的scala封装类,如Int、Double等,AnyVal是它们的基类;对应引用类型,AnyRef是它们的基类。 scala中,所有类的关系可以用下面这张 ...
在上一节创建了一个scala类,如果没有更多的方法,scala类的定义还可以更简单一些,看一下下面这个CreditCard类的定义: 是的,只用一行就完成了类的定义,连大括号都不需要。 因为scala也是运行在JVM上,可以考虑以java的方式来看看编译后的类文件。查看的方式还是比较 ...
scala中的字符串类就是java中的java.lang.String类。不过scala也为String提供了一个富封装类:scala.runtime.RichString。 scala可以将java.lang.String类自动转换为scala.runtime.RichString类 ...
Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类。如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利。本篇的要点包括: 1. 类中 ...