加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

8.Scala-对象

发布时间:2020-12-16 18:02:24 所属栏目:安全 来源:网络整理
导读:第8章 对象 8.1 单例对象 Scala 中没有静态方法和静态字段, 你可以用 object 这个语法结构来达到同样的目的。 class Man private (val sex: String,name: String){ def describe = { println("Sex:" + sex + "name:" + name) } } object Man{ var instance:

第8章 对象

8.1 单例对象

Scala 中没有静态方法和静态字段, 你可以用 object 这个语法结构来达到同样的目的。
class Man private(val sex: String,name: String){
  
  def describe = { println("Sex:" + sex + "name:" + name) } } object Man{ var instance: Man = null def apply(name: String)={ if(instance == null){ instance = new Man("男",name) } instance } }

?

对象构造器在该对象第一次使用时调用。如果对象没有使用过,他的构造器不会被执行。

对象基本具有类的所有特性,就是一点,你不能设置构造器的参数。?

测试:

val man1 = Man("Nick")
val man2 = Man("Thomas")
man1.describe
man2.describe

?

?

?

?

8.2 伴生对象

Java 中会有类既有实例方法又有静态方法的类。Scala 中可以通过伴生对象进行实现。
如下:
class Account {
  val id = Account.newUniqueNumber()   private var balance = 0.0   def deposit(amount: Double) { balance += amount }   def description = "Account " + id + " with balance " + balance } object Account { // The companion object   private var lastNumber = 0   private def newUniqueNumber() = { lastNumber += 1; lastNumber } }

?

测试:

val acct1 = new Account
val acct2 = new Account acct1.deposit(1000) val d1 = acct1.description val d2 = acct2.description

?

?尖叫提示:

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

?

8.3 Apply 方法

1)apply 方法一般都声明在伴生类对象中,可以用来实例化伴生类对象:

class Man private(val sex: String,name: String){

  def describe = { println("Sex:" + sex + "name:" + name) } } object Man{ def apply(name: String)={ new Man("男",name) } }

?

测试:

val man1 = Man("Nick")
val man2 = Man("Thomas") man1.describe man2.describe

?

?

2)也可以用来实现单例模式,我们只需要对上述例子稍加改动:

看上面 8.1 单例模式

?

?

?

?

?

8.4 应用程序对象

每一个 Scala 应用程序都需要从一个对象的 main 方法开始执行,这个方
法的类型为 Array[String]=>Unit。
object Hello {
    def main(args: Array[String]) {
        println("Hello,World!") } }

?

?或者扩展一个App特征:

object ObjectSyllabus extends App{

  if(args.length > 0) println("hello," + args(0)) else println("hello,world!") }

?

?

?

?

8.5 枚举

Scala 中没有枚举类型,定义一个扩展 Enumeration 类的对象,并以 value
调用初始化枚举中的所有可能值。
object TrafficLightColor extends Enumeration {
    val Red = Value(0,"Stop") val Yellow = Value(10) // Name "Yellow" val Green = Value("Go") // ID 11 }

?测试:

println(TrafficLightColor.Red)
println(TrafficLightColor.Red.id)
println(TrafficLightColor.Red.toString)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读