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
匹配這種類型。這種方法的正確返回類型是什麼?