Scala 类Int是抽象的;无法实例化
在使用Scala进行编程时,我遇到了: 虽然您可以定义自己的值类(参见第11.4节),但是 Scala内置了九个值类:Byte、Short、Char、Int、Long、, 浮点、双精度、布尔和单位。其中前八个对应 到Java的基元类型,它们的值在运行时表示 时间作为Java的基本值。这些类的实例是 在Scala中都以文本形式写入。例如,42是 Int,'x'是Char的实例,false是boolean的实例。你 无法使用new创建这些类的实例这是强制的 通过“技巧”,值类都被定义为抽象的 和最终版本。 由于Scala 类Int是抽象的;无法实例化,scala,Scala,在使用Scala进行编程时,我遇到了: 虽然您可以定义自己的值类(参见第11.4节),但是 Scala内置了九个值类:Byte、Short、Char、Int、Long、, 浮点、双精度、布尔和单位。其中前八个对应 到Java的基元类型,它们的值在运行时表示 时间作为Java的基本值。这些类的实例是 在Scala中都以文本形式写入。例如,42是 Int,'x'是Char的实例,false是boolean的实例。你 无法使用new创建这些类的实例这是强制的 通过“技巧”,值类都被定义为抽象的 和最终
newint
给出了错误类Int是抽象的;无法实例化
val a:Int=Scala中的新Int
。Java允许新的整数(23)
问题:作者的技巧是什么。为什么Scala将值类定义为抽象类和最终类
作者的伎俩是什么
“诀窍”是
- 当一个类是抽象的时,您不能创建它的实例(不能调用
new
)
- 当一个类是final时,您不能创建子类
- 当一个类是抽象的,并且不能生成子类时,那么也不能生成可以实例化的具体子类
因此,应用程序代码无法实例化值类
为什么Scala将值类定义为抽象的和最终的
值类的要点是它们是由(不可变的)值/内容定义的。对象标识不相关
Scala编译器还试图通过尽可能不创建任何对象(仅直接使用非固定原语)来优化值类。只有当我们能够确保您可以随意装箱和拆箱时,这才有效
在Java中,new Integer(1)
和另一个new Integer(1)
是两个不同的对象,但这对于纯值类来说并不有用(如果您想将这些不同的实例用作锁监视器对象或其他需要对象标识的对象,您只会混淆自己和其他人,不应该使用Integer
)
作者的伎俩是什么
“诀窍”是
- 当一个类是抽象的时,您不能创建它的实例(不能调用
new
)
- 当一个类是final时,您不能创建子类
- 当一个类是抽象的,并且不能生成子类时,那么也不能生成可以实例化的具体子类
因此,应用程序代码无法实例化值类
为什么Scala将值类定义为抽象的和最终的
值类的要点是它们是由它们的(不可变的)值/内容定义的。对象标识是不相关的
Scala编译器还试图通过尽可能不创建任何对象来优化值类(仅直接使用未绑定的原语)。只有在我们能够确保您可以随意进行box和unbox操作的情况下,这才有效
在Java中,new Integer(1)
和另一个new Integer(1)
是两个不同的对象,但这对于纯值类来说并不有用(如果您想将这些不同的实例用作锁监视器对象或其他需要对象标识的对象,您只会混淆自己和其他人,不应该使用Integer
)。@Thilo将此作为回答。“Java允许新的Integer(23)。”Scala也是如此。Scala.Int
不是java.lang.Integer
,java不允许new Int(23)
@Thilo将此作为回答。“java允许新整数(23)。”Scala也是如此。Scala.Int
不是java.lang.Integer
,java不允许new Int(23)
。