1
我是新来的Scala和陷入麻烦与理解这个声明:如何理解Scala的方法声明?
下面是Akka
的Props
对象声明:
def apply[T <: Actor: ClassTag](): Props = __THE_DEFENITION_GOES_HERE__
我们为什么可以这样使用它:
val props = Props[TestActor]
其中class TestActor extends Actor
。我很好奇如何通过Generic Type
的说法,编译器能够找到适当的方法defenition。它是如何工作的?
但是'T <:Actor:ClassTag'中的'ClassTag'是什么意思?它使用'隐式[ClassTag [T]]。runtimeClass'。 – user3663882
'ClassTag'在运行时携带关于类的信息。 ':'在'ClassTag'上定义了一个_context bound_,意思是“在隐式范围内有一个ClassTag [T]”的实例;它是'def apply [T <:Actor](隐式证据:ClassTag [T])'的语法糖。 有关'ClassTag'类的更多信息,可以阅读:http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html 有关上下文边界的具体信息,请参见:http: //docs.scala-lang.org/tutorials/FAQ/context-and-view-bounds.html#what-is-a-context-bound – stefanobaghino
@ user3663882“ClassTag”是一种解决类型擦除的方法JVM。 – Jesper