我有一个帮助器方法:
def controlStructure[T <: SomeObject](exceptions: Class[_]*)(body: => T) = {
try {
val tempObject = body
tempObject.callSomeMethod
Some(tempObject)
} catch {
case e if (exceptions.contains(e.getClass)) => None
}
} 调用时使用:
controlStructure[MySomeObject](classOf[Exception]) { getMySomeObjectSomehow } 它的要点是在传入的实体上调用'callSomeMethod‘(例如,从ORM加载),顺便说一下,它在异常处理中也包装了一些东西。
现在我想添加一个新的方法,除了T的一个集合(java.util.List)之外,它做同样的事情。
我不确定在方法签名中使用T集合的语法和结构,以及抽象类型参数定义。
谢谢你的帮助。
发布于 2010-01-19 06:50:15
对于scala列表,您需要的东西(我认为)如下所示:
def controlStructure[T <: SomeObject](exceptions: Class[_]*)(body: => List[T]) = {
try {
val tempObject = body
tempObject.foreach { _.callSomeMethod() }
Some(tempObject)
}
catch {
case e if (exceptions.contains(e.getClass)) => None
}
}我还没有在scala中使用过Java list,所以我猜你可以像这样用java.util.List来做:
def controlStructure[T <: SomeObject](exceptions: Class[_]*)(body: => java.util.List[T]) = {
import scala.collection.JavaConversions._
try {
val tempObject = body
tempObject foreach { _.callSomeMethod() }
Some(tempObject)
}
catch {
case e if (exceptions.contains(e.getClass)) => None
}
}发布于 2010-01-19 06:48:35
在Scala中没有名为vararg的参数。如果你想要这样,你必须传递一个函数。有关此效果,请参阅增强请求的this ticket。
发布于 2010-01-20 00:42:25
谢谢你的帮助米奇。在这种情况下,答案是将方法的返回类型指定为java.util.ListT,因为一旦Scala没有使用其神奇的类型推断来解决所有问题。
https://stackoverflow.com/questions/2089616
复制相似问题