0

私はヘルパーメソッドを持っています:

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 } 

その主なポイントは、渡されたエンティティ (たとえば、ORM からロードされたもの) で「callSomeMethod」を呼び出すことですが、付随的に例外処理もラップします。

T のコレクション (java.util.List) に対して同じことを行う新しいメソッドを追加したいと思います。

メソッド シグネチャで T のコレクションを操作するための構文と構造、および抽象型パラメーターの定義がわかりません。

ご協力いただきありがとうございます。

4

3 に答える 3

1

スカラリストを使用すると、次のようなものが必要になります(私は思います):

  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 リストを扱ったことがないので、次のように 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-18T22:50:15.340 に答える
0

Scala には vararg による名前渡しはありません。これが必要な場合は、関数を渡す必要があります。この趣旨の拡張要求のこのチケットを参照してください。

于 2010-01-18T22:48:35.063 に答える
0

助けてくれてありがとうミッチ。この場合の答えは、メソッドの戻り値の型を java.util.List[T] のように指定することであることがわかります。Scala は魔法の型推論を使用してすべてを整理していません。

于 2010-01-19T16:42:25.363 に答える