Имею следующее:
trait C {}
object O {
case class Foo(bar: String) extends C
}
И я хотел бы создать экземпляр Foo из String. До того момента, как я создал экземпляр Foo, но я не могу выполнить приведение к C. Я использую:
val ob = runtimeMirror.staticModule("O.Foo")
val foo = runtimeMirror.reflectModule(ob).instance
Теперь foo является экземпляром O.Foo, но его нельзя преобразовать в C.
val c = foo.asInstanceOf[C]
Эта самая последняя строка возвращает:
O$foo$ cannot be cast to C
asInstanceOf
еще меньше. Скорее используйте заводской шаблон (например, stackoverflow.com/a/45654971/3347384) - person cchantep   schedule 13.08.2017C
является надстройкой экземпляровFoo
, а не сопутствующим объектомO.Foo
, о котором вы говорите. - person Gábor Bakos   schedule 13.08.2017Foo
, который имеет как supertraitC
, у меня нет сопутствующего объекта дляFoo
- person ie8888   schedule 14.08.2017O.Foo
, который является сопутствующим объектом classO.Foo
. Вы не создаете новый экземпляр, вы просто получаете уже существующего компаньона. Если вы действительно сделалиO.Foo
, то приведение кC
будет успешным, но вы получите толькоO.Foo.type
, который не являетсяC
. - person HTNW   schedule 14.08.2017