如何返回一个子类

时间:2014-03-13 11:03:37

标签: scala type-parameter

我想定义一个返回Class对象的工厂方法,例如用于创建gui对象。

我定义了一个类似

的方法
def getWorkerClass2[T <: Component]():Class[T] = {return classOf[Frame]; }

返回Component-Class的子类,但scala编译器抱怨

type mismatch;
 found   : Class[java.awt.Frame](classOf[java.awt.Frame])
 required: Class[T]
  def getWorkerClass2[T <: Component]():Class[T] = {return classOf[Frame]; }
                                                              ^

我不知道为什么。

编辑: 我正在使用Scala 2.10

1 个答案:

答案 0 :(得分:3)

方法1:

class C {
  def getWorkerClass2: Class[_ <: Component] = classOf[Frame]
}

方法2:

trait Worker {
  def getWorkerClass2: Class[_ <: Component]
}

class A extends Worker {
  def getWorkerClass2 = classOf[Frame]
}

class B extends Worker {
  def getWorkerClass2 = classOf[Window]
}