✖
✖
✖
クラスメソッドとインスタンスメソッドの定義
どうやら static なんとか、みたいに書いてクラスメソッドをつくる方法はないようだ?
class ModelBase (initarg:Any) {
// class method
def create (args: (Symbol, Any)*) = {
val ret = this.getClass.newInstance.asInstanceOf[ModelBase]
for ( (key, value) <- args) {
ret(key) = value
}
ret
}
// instance method
def update (key:Symbol, value:Any):Unit = {
println(key, value)
}
}
class User (a:Any) extends ModelBase(a) {
def update_session ():String = {
"......."
}
}
object User extends User(null)
val user = User.create('name -> "cho45", 'session_key -> "...")
println(user)
println(user.update_session) //=> type error (user が ModelBase にキャストされてるから……)object を class とは別に継承して定義して (これ、名前空間が別なんだろうか……) あげるみたいだ。
あと、こういうスーパークラスにインスタンス化をおいだす処理をどう書いたらいいかわからない……
こういうときのための generics か……
class ModelBase [T <: ModelBase[T]] (initarg:Any) {
// class method
def create (args: (Symbol, Any)*) = {
val ret = this.getClass.newInstance.asInstanceOf[T]
for ( (key, value) <- args) {
ret(key) = value
}
ret
}
// instance method
def update (key:Symbol, value:Any):Unit = {
println(key, value)
}
}
class User (a:Any) extends ModelBase[User](a) {
def update_session ():String = {
"......."
}
}
object User extends User(null)
val user = User.create('name -> "cho45", 'session_key -> "...")
println(user)
println(user.update_session)
クラス名からインスタンスがつくれない
val con = classOf[Symbol].getConstructor(classOf[String])が
Exception in thread "main" java.lang.ExceptionInInitializerError
at Main.main(scala.scala)
Caused by: java.lang.NoSuchMethodException: Main$User$.<init>(java.lang.Object)
at java.lang.Class.getConstructor0(Class.java:2678)
at java.lang.Class.getConstructor(Class.java:1629)
at Main$ModelBase.create(scala.scala:13)
at Main$.<init>(scala.scala:38)
at Main$.<clinit>(scala.scala)
... 1 moreというエラーでにっちもさっちもいかない……



