0
下面我有一個有目的地複雜的Hello World應用程序,其中我無法弄清楚爲什麼buildAndRun2
方法不能編譯。混淆了引用抽象類型的實際類型
abstract class BaseFactoryOf[A]{
type TheType
def make: TheType
}
abstract class FactoryOf[A] extends BaseFactoryOf[A]{
final type TheType = A
}
class HelloWorld {
def execute: String = "Hello World!"
}
class HelloWorldFactory extends FactoryOf[HelloWorld] {
def make: TheType = new HelloWorld
}
def buildAndRun1[T <: BaseFactoryOf[_],B](factory: T)(f: T#TheType => B): B ={
f(factory.make)
}
def buildAndRun2[T <: FactoryOf[_],B](factory: T)(f: T#TheType => B): B ={
f(factory.make)
} //This doesn't compile due to a type mismatch error. But Why?!
//Client Code
buildAndRun1(new HelloWorldFactory)(i => i.execute) // This Works!
buildAndRun2(new HelloWorldFactory)(i => i.execute) // Epic Fail!
無用的中級FactoryOf[A]
實際上是爲了介紹這個問題而寫的。我很確定這與type TheType
有關,但它是什麼?如果有的話,這是無用的中級FactoryOf
類,它允許我驗證type TheType
是否與A
相同,所以通過這個邏輯我應該更有信心使用buildAndRun2
方法。
我不知道我可以使用'''factory.Type'''表達式。 TNX – shayan