Scala hala bir yansıması API eksik:
package myPackage
object myObject
... sonra böyle bir şey yoktur.
import scala.reflect.Manifest
def companionObj[T](implicit man: Manifest[T]) = {
val c = Class.forName(man.erasure.getName + "$")
c.getField("MODULE$").get(c)
}
scala> companionObj[List[Int]].asInstanceOf[List$].make(3, "s")
res0: List[Any] = List(s, s, s)
Bu şekilde scala bağlıdır:
import scala.reflect._
def companion[T](implicit man: Manifest[T]) : T =
man.erasure.getField("MODULE$").get(man.erasure).asInstanceOf[T]
scala> companion[List$].make(3, "s")
res0: List[Any] = List(s, s, s)
doğrudan sınıfını kullanabilirsiniz nesnesi türsüz arkadaşı almak için: arkadaşı nesne sınıfını yükleyerek arkadaşı nesnesinin bir örneğini alabilirsiniz java sınıflarına eşlenir.
Kutsal inek gibi yapabilirsiniz. Bu sözdiziminin Scala özelliklerinin sabit bir parçası olup olmadığını biliyor musunuz (dilin herhangi bir yerinde olduğu gibi). Buna güvenmek kötü bir fikir gibi görünüyor. Ve amacım kodun daha temiz olmasını sağlamaktı * ... Teşekkürler! – Dave
Daha önce de belirttiğimiz gibi, Scala'da yansıma API'sı yok, bu yüzden Scala spekleri tarafından kapsanmış olsun ya da olmasın, bunu yapmanın tek yolu budur. Bu sorunun farkına vardım/cevap bir yıldan fazladır, burada haber var mı? – pdinklag