Scala实例化来自嵌套通用代码中的清单

时间:2012-02-15 11:52:03

标签: scala instantiation type-erasure nested-generics

如果我能弄清楚如何“将清单附加到通用调用堆栈”(正如Joshua在“深度Scala”的第7.2.2节中所写的那样),是否可以使我沿着这些线实例化B?:< / p>

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 个答案:

答案 0 :(得分:1)

您无法像这样实例化内部类B,因为此类内部类的构造函数秘密地引用外部类的对象。 newInstance只能在具有零参数构造函数的类上调用。