1
我有几个的DAO(使用Slick)像下面方法返回类型[C <:记录,T <:表[U]]工作不正常
abstract class SuperRecord
abstract class SubSuperRecord extends SuperRecord
class Record1 extends SuperRecord
class Record2 extends SubSuperRecord
abstract class SuperTable[T <: SuperRecord] extends slick.driver.MySQLDriver.simple.Table[T]
abstract class SubSuperTable[T <: SubSuperRecord] extends SuperTable[T]
object DAO1 extends SuperTable[Record1]
object DAO2 extends SubSuperTable[Record2]
我在返回这些下面的方法 - 我不是在声明返回类型,我让那
def getTable(table: String) = {
table match {
case "DAO1" => DAO1
case "DAO2" => DAO2
case _ => throw new IllegalArgumentException("invalid table")
}
}
我试图重构返回一个Try
对象方法的类型推理引擎照顾,但是这似乎是混淆类型推理引擎
def getTable(table: String) = Try {
table match {
case "DAO1" => DAO1
case "DAO2" => DAO2
case _ => throw new IllegalArgumentException("invalid table")
}
}
当我打开包装就这个成功,我得到一个序列化的,所以我想,以协助类型推理引擎
def getTable[T <: SuperRecord, U <: SuperTable[T]](table: String): Try[U] = Try {
table match {
case "DAO1" => DAO1
case "DAO2" => DAO2
case _ => throw new IllegalArgumentException("invalid table")
}
}
然而,编译器告诉我,无论是DAO1
,也不DAO2
匹配这种类型。这种方法的正确返回类型是什么?