在Scala里,Nothing是所有类的子类,是最低层的子类。那Scala中需要Nothing的目的何在呢?
Scala中用类型推演确定表达式和函数的类型。如果推演出的类型过于宽泛,则无助于类型校验。与此同时,如果一个分支返回Int,另一个分支抛出异常,那么在这样的情况下,将类型推演为Int会比通用的Any更有用!也就是说,抛出的异常必须推演为返回Int或是Int的子类型,以得到兼容。
不过,任何地方都可能抛出异常,并非所有的表达式都可以推演为Int。Scala用Nothing类型--所有类型的子类--帮助类型推演更平滑的工作。既然它是任何类型的子类,它就可以替换任何东西。Nothing是抽象的,因此,在运行时,它的实例病不会真实存在。它纯粹是类型推演的帮手。
下面是一个抛出异常的方法,我们看一下Scala如何推演类型:
def madMethod() = {throw new IllegalArgumentException()}
println(getClass().getDeclaredMethod("madMethod", null).
getReturnType().getName())
方法madMethod()只是抛出一个异常,使用反射可以查询到这个方法的返回类型,结果如下:
scala.runtime.Nothing$
Scala的Nothing实际上有些非同寻常--它是所有其他类型的子类型。这样一来,Nothing就可以替换为Scala里的任何东西
分享到:
相关推荐
Scala 是一种多范式的编程语言,它融合了面向对象和函数式编程的特性。下面将详细解释题目中涉及的Scala知识点: 1. **var、val 和 def 的区别**: - `var` 定义可变变量,可以多次赋值。 - `val` 定义不可变变量...
允许运行时数据用作Scala案例类定义: 在运行时定义并加载案例类 通过类型别名的伪Type-Provider 运行时代码生成和评估可以在scala.tools.reflect.ToolBox完成,但是每个包只能创建一个类(请参见此)。 因此,...
在API方面,Scala的基础库非常丰富,包含了许多核心类和特质。例如,`Any`, `AnyVal`, 和 `AnyRef` 是所有Scala类型的根,`AnyVal` 包括原始类型如`Int`, `Double`, `Char`等,而`AnyRef` 类似于Java中的`Object`,...
### Scala简介:结合函数式与面向对象编程的强大语言 #### Scala概述 Scala是一种相对新兴的编程语言,旨在为Java虚拟机(JVM)以及后来的通用语言运行时(CLR)提供支持。它融合了函数式编程(Functional Programming,...
- **Nothing类型**:通常表示执行过程中产生的异常。 **5. Scala变量的声明和使用** - 使用 `val` 声明不可变变量(常量)。 - 使用 `var` 声明可变变量。 - 变量类型可以自动推导,无需显式指定类型。 **6. ...
10.3 闲话Nothing(以及Null) 254 10.4 Product、case类和元组 258 10.5 Predef对象 260 10.5.1 隐式转换 260 10.5.2 类型定义 262 10.5.3 条件检查方法 263 10.5.4 输入输出方法 263 10.5.5...
在变量章节中,详细介绍了变量的基本使用、Scala变量的声明语法和注意事项、程序中+号的使用、各种数据类型(整数、浮点数、字符、布尔值、Unit类型、Null类型和Nothing类型)的介绍和使用细节。 对于变量类型转换...
Scala Unit类型、Null类型和Nothing类型 Unit类型、Null类型和Nothing类型 基本说明 使用细节和注意事项 Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型(AnyRef),但是不能...
- **类与对象定义**:Scala 支持面向对象编程,可以定义类和对象,并实现继承、多态等特性。 - **构造器**:Scala 中可以定义主构造器和辅助构造器。 - **特质(Trait)**:类似于 Java 中的接口,但更加灵活,可以...
Scala 的数据类型包括整形、空类型、Unit 类型、Null 类型和 Nothing 类型等。 * 整形:Scala 的整形与 Java 相似,包括 `Byte`、`Short`、`Int`、`Long` 等。 * 空类型:Scala 的空类型包括 `Unit` 和 `Null` 两种...
- 语言基础:理解变量声明、基本类型、BigInt、字符串操作、Null、None、Nil、Nothing的概念以及它们的使用。 - 操作符和控制结构:学会使用==和eq,理解Option[T]和类型别名type,以及如何使用if..else和循环操作。...
此外,还有Unit(表示无返回值,类似于void)、Null(所有AnyRef的子类,只有一个实例null)和Nothing(最底层类型,所有类型的子类型,用于异常处理)。 6. 类型转换与运算: Scala在运算时会自动进行类型提升,...
- **Nothing类型**:任何类型的子类型,通常用于异常处理。 - **字符类型**:`Char`类型,16位Unicode字符。 - **布尔类型**:`Boolean`类型,只能取值`true`或`false`。 #### 四、Scala的运算符 **1. 算术运算符*...
本文主要介绍了 Scala 基础语法的相关知识点,包括变量和类型、数据类型、Null 和 Nothing 等内容。Scala 语言的设计思想是为了提供一种更加简洁、灵活和高效的编程体验,满足现代化软件开发的需求。
Any , AnyVal , AnyRef , Unit , Null , Nothing Java内存模型 控制具有副作用的结构while , try/catch (和异常), for 更控制结构没有副作用-模式匹配,(功能性) for 复合类型 异构-排列的n元组...
case object None extends Option[Nothing] ``` **3. 函数式接口与代数结构** 代数结构与函数式编程的接口设计密切相关。例如,`Functor`、`Applicative`、`Monad` 和 `Foldable` 等概念都是代数结构在函数式编程中...
例如,`Any`, `AnyVal`, `AnyRef`, `Unit`, `Null`, `Nothing`是Scala的基本类型,而`Int`, `Double`, `String`等则是具体的值类型。 2. **模式匹配**:Scala的模式匹配是其语法糖之一,它允许我们以一种简洁的方式...
控制结构和块作为表达式List , String , Range基本操作[]的名义上反对结构性打字OOP示例班级对象和伴侣对象统一访问原则案例类特质关于OOP + FP的讨论[ ] 数学意义上的功能参考透明性(参考透明性) 替代模型用作...
接下来,我们转向Scala的类定义。使用`class`关键字可以创建类,如`class Person(name: String, job: String)`。默认情况下,类有一个无参构造器,但也可以定义有参构造器来指定初始化参数。`toString()`方法通常...