scala – 从特征引用构造函数参数
发布时间:2020-12-16 08:57:42 所属栏目:安全 来源:网络整理
导读:在 Scala中,特征是否有可能引用它所混合的类的命名构造函数参数?下面的代码无法编译,因为ModuleDao的构造函数参数不是特征中定义的val.如果我在构造函数参数之前添加val以使其公开,它会与特征中的那个匹配并编译,但我不想将其设置为val. trait Daoisms { va
在
Scala中,特征是否有可能引用它所混合的类的命名构造函数参数?下面的代码无法编译,因为ModuleDao的构造函数参数不是特征中定义的val.如果我在构造函数参数之前添加val以使其公开,它会与特征中的那个匹配并编译,但我不想将其设置为val.
trait Daoisms { val sessionFactory:SessionFactory protected def session = sessionFactory.getCurrentSession } class ModuleDao(sessionFactory:SessionFactory) extends Daoisms { def save(module:Module) = session.saveOrUpdate(module) } /* Compiler error: class ModuleDao needs to be abstract,since value sessionFactory in trait Daoisms of type org.hibernate.SessionFactory is not defined */ // This works though // class ModuleDao(val sessionFactory:SessionFactory) extends Daoisms { ... } 解决方法
如果你只关心使它成为val是可见性,你可以像这样保护val:
scala> trait D { protected val d:Int | def dd = d | } defined trait D scala> class C(protected val d:Int) extends D defined class C scala> new C(1) res0: C = C@ba2e48 scala> res0.d <console>:11: error: value d in class C cannot be accessed in C Access to protected value d not permitted because enclosing class object $iw in object $iw is not a subclass of class C in object $iw where target is defined res0.d ^ scala> res0.dd res2: Int = 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |