Создание экземпляров Scala из манифестов во вложенном универсальном коде - PullRequest
0 голосов
/ 15 февраля 2012

Если бы я мог выяснить, как "присоединить манифесты обратно к стеку общих вызовов" (о чем пишет Джошуа в разделе 7.2.2 "Scala in Depth"), это позволило бы мне создать экземпляр B по этим линиям?:

def m1[T](implicit m: Manifest[T]): T = m.erasure.newInstance.asInstanceOf[T]

class A {
  def m2[T](implicit m: Manifest[T]): T = m.erasure.newInstance.asInstanceOf[T]
  def inA() {
    m1[A]
    m2[A]
    m2[B] // Doesn't work...
  }
  class B
}

m1[A]
val a = new A
a.m2[A]
a.inA() // boom

Или мне нужен какой-то вид?

1 Ответ

1 голос
/ 15 февраля 2012

Вы не можете создать экземпляр внутреннего класса B таким образом, потому что конструктор таких внутренних классов тайно принимает ссылку на объект внешнего класса. newInstance можно вызывать только для классов, которые имеют конструктор с нулевым аргументом.

...