scala - scala中抽象类型类的初始化问题

标签 scala types abstract

我定义了一个抽象类型的类,如下所示:

abstract class AbsCell2{
    type T
    val init: T
    private var value: T = {
         println("Hello "+init);
         init
    }
    def get : T = value
    def set(x : T) = { value = x}
}

现在我实例化一个 Int 类型的对象
scala> val cell = new AbsCell2{type T = Int ; val init = 10}
Hello 0
cell: AbsCell2{type T = Int} = $anon$1@969ebb

注意println的输出.它接缝变量 init还没有初始化为10。注意scala的版本是2.9.0-1

最佳答案

我认为您正在寻找 Scala 的 early initializers ,

scala> val cell = new {type T = Int ; val init = 10} with AbsCell2
Hello 10
cell: AbsCell2{val init: Int; type T = Int} = $anon$1@1efa9557

scala> cell.get
res0: cell.T = 10

早期初始化器允许您在类构造函数运行之前分配一个新对象并设置一些特定字段。在这种情况下,由于 value取决于 init ,我们使用早期初始化语法( new { val init = ... } with AbsCell2 )来首先设置 init以便类构造函数可以正确初始化 value .

另见这个问题:In Scala, what is an "early initializer"?

关于scala - scala中抽象类型类的初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055618/

相关文章:

scala - 为什么在某些阶段之后,所有任务都分配给spark中的一台机器(执行器)?

python - 使用 numpy genfromtxt 从混合数据类型文件导入大整数

swift - 什么是永不返回类型?

java - 在 JFrame 中添加同一类的两个组件

scala - 参数化类中的类型不匹配 - 但为什么呢?

scala - 自类型不符合基类

java - 节点如何知道哪些节点看到了集群的当前状态?

Scala volatile 类型 : How is @uncheckedStable unsafe?

Java 抽象访问者 - 保证成功吗?如果是这样,为什么?

java - 从 JAVA 中的一个抽象方法重载方法