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

关于scala中抽象类类初始化的问题

发布时间:2020-12-16 10:01:54 所属栏目:安全 来源:网络整理
导读:我用抽象类型定义了一个类,如下所示: 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 A
我用抽象类型定义了一个类,如下所示:

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

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读