Scala(五)

Scala_Day05


几种空的对比

  • Null and null

    • Null是一个trait
    • null是Null的实例
  • Nil 空的列表

  • Nothing

    • Nothing是一切类型的子类
    • Nothing没有具体的实例
  • None

    是Option的子类,Option还有一个子类是Some

package com.shujia

import com.shujia.Demo11CaseClass.CaseStu

object Demo22NoneNilNullNothingUnit {
  // Null null Nil Nothing None Unit
  def main(args: Array[String]): Unit = {
    // 1、Null and null
    // Null是一个trait特征
    // null是Null的实例
    def tryit(thing: Null): Unit = {
      println("That worked!")
    }
//                tryit("hey")

    val someRef: String = null
//                tryit(someRef)

    tryit(null)

    val nullRef: Null = null
    tryit(nullRef)

    // 2、Nil 空的列表
    val nil: Nil.type = Nil
    println(nil)
    println(nil.length)

    // 3、Nothing
    /**
     * trait :scala中的接口 但又像抽象类
     * Nothing是另一个trait。它继承了Any类。Any是整个Scala类型系统的超类。
     * Any可以引用对象类型以及诸如普通的旧整数或双精度的值。
     * Nothing是一切类型的子类。
     * Nothing没有具体的实例。
     * Nothing是List的子类,它是String的子类,它是Int的子类型,它是YourOwnCustomClass的子类。
     */

    val ints: List[Any] = List[Int](1, 2, 3, 4, 5)

    val emptyTeacherList: List[Teacher] = List[Nothing]()
    val emptyStudentList: List[CaseStu] = List[Nothing]()
    val emptyIntList: List[Int] = List[Nothing]()
    val emptyStringList: List[String] = List[Nothing]()
    //    val emptyStringList: List[String] = List[Nothing]("abc")
    val emptyUnitList: List[Unit] = List[Nothing]()

    // 4、None
    /**
     * 当你写一个函数,遇到没有什么实用价值的情况时,你会怎么做?
     * 通常有几种方法来处理它:
     * 1、你可以返回null,但是这会导致问题。
     * 如果调用者不希望得到null,那么当他尝试使用它时可能会面临NullPointerException
     * 否则调用者必须检查null
     * 一些函数不会返回null,但有些函数可能会。
     * 作为一个调用者,他不知道那些函数会返回null 哪些不会。
     *
     * 2、使用throws关键字,作为异常抛出。
     * 需要用try / catch处理
     * 通常希望在真正发生异常的情况下才使用try/catch
     * 而不仅仅是为了处理一个普通的无结果的情况
     *
     * 3、Scala中的方式。
     * 如果你想返回一个字符串
     * 但你知道你可能无法返回一个合理的值
     * 你可以返回一个Option[String]
     */

    val s: String = null

    if (s != null) {

      s.split(",")
    }

    def getAStringMaybe(num: Int): Option[String] = {
      if (num >= 0) {
        Some("A positive number!")
      }
      else {
        None
      } // A number less than 0?  Impossible!
    }

    val num: Int = 100
    getAStringMaybe(num) match {
      case Some(str) => println(str)
      case None => println("No string!")
    }

    // 5、Unit 相当于Java中的void,表示函数不返回任何值
  }
}

trait的介绍

package com.shujia

class P(name: String) {
  val _name: String = name
}

// 像接口:可以被with多次,即一个类可以同时实现多个trait
// 又像抽象类:可以定义具体的属性及方法,以及抽象的方法
trait K {
  val _gender1: String = "男"

  def isEqualGender1(g: String): Boolean

  def isNotEqualGender1(g: String): Boolean = {
    !isEqualGender1(g)
  }
}

trait KK {
  val _gender2: String = "男"

  def isEqualGender2(g: String): Boolean

  def isNotEqualGender2(g: String): Boolean = {
    !isEqualGender2(g)
  }
}

class Q(name: String, age: Int) extends P(name) with K with KK {
  val _age: Int = age

  override def isEqualGender1(g: String): Boolean = {
    _gender1 == g
  }

  override def isEqualGender2(g: String): Boolean = {
    _gender2 == g
  }
}

object Demo23Trait {
  def main(args: Array[String]): Unit = {
    val zs: Q = new Q("zs", 20)
    println(zs.isEqualGender1("男"))
    println(zs.isEqualGender1("女"))
    println(zs.isEqualGender2("女"))
    println(zs.isEqualGender2("女"))

  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值