調用假設我有像以下代碼:指定的方法來對未知的一般類型
abstract class GenericType[T]{
val someSeq: Seq[T]
def list() = for(item <- someSeq) println(item)
}
class ConcreteType extends GenericType[Int] {
val someSeq = Seq(1, 2, 3)
}
object MyApp {
def main(args: Array[String]) {
val ct = new ConcreteType
ct.list()
}
}
即簡單地打印出1 2 3(在不同的行)。但是,假設我想創建一個調用T
方法的泛型類型實例。例如,假設我想調用整數的max
方法。我將如何指定要調用的方法?
我認爲我可以在抽象類中創建一個值,該類包含調用每個item
的方法並在具體類中指定該方法。
因此,換句話說,我想是這樣結束了:
abstract class GenericType[T]{
val someSeq: Seq[T]
val methodToCall: ???
def list() = for(item <- someSeq) println(item.methodToCall)
}
class ConcreteType extends GenericType[SomeType] {
val someSeq = Seq(1, 2, 3)
val methodToCall = ???.max(_, 2)
}
而且期望main
來然後打印出2 2 3(即,for(item <- someSeq) println(item.max(_, 2))
結果)。
當然,一個解決方案是使用反射和指定要調用的方法的字符串名稱,但這有我想避免的性能問題。 – Mike 2014-10-16 17:53:55