如何在Scala中创建投影类型的实例?

时间:2015-10-16 15:59:20

标签: scala

我使用Type Projection。您可以在下面的示例中找到类型别名。

object Example extends App {
  type AliasForY = X#Y

  class X {
    class Y {
      def fun = 100500
    }
  }

  def f(y: AliasForY) = y.fun

  println {
    f(new AliasForY())
  }

}

我想通过别名实例化我的内部类,但是我收到错误Example.X is not a legal prefix for a constructor

我该如何解决?

2 个答案:

答案 0 :(得分:4)

内部类不能在其包含的类之外实例化。如果您要在Y之外创建X的新实例,X必须是object

答案 1 :(得分:1)

要创建内部类的实例,您应该拥有其包含类的实例。所以这会奏效:

val x = new X
f(new x.Y())