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'として設定していませんか?あなたはすでに「道教」でこれをやっているので、なぜ「モジュールダオ」でそれをしないのですか?問題は、あなたが宣言している方法では、 'sessionFactory'は実質的に私的です - だれもそれを見ることができないということです。 –