リフレクションを使用して、指定されたクラスのコンストラクタを反復しようとしています。 問題は、各要素に対して何かをしてから、ある述語に一致するものだけを返す必要があるということです。私がいないだけで(各要素に対して何かを呼び出す必要があるため、私は、これは理解のために行うことができるかどうかわからないんだけどスカラflatMapのgetConstructorsメソッド(リフレクション)
argument expression's type is not compatible with formal parameter type;
found : java.lang.reflect.Constructor[_] => Iterable[java.lang.reflect.Constructor[?0(in value $anonfun)]] forSome { type ?0(in value $anonfun) }
required: java.lang.reflect.Constructor[_] => scala.collection.GenTraversableOnce[?B]
:次のコードは、例外
classOf[String].getConstructors.flatMap(x=> doSomething(x); if(predicate(x)) Some(x) else None)
例外がスローされます述語を保持しているもの):c.getMethodsを呼び出す
for{
x <- c.getConsturctors
//doSomething(x) ??
if predicate(x)
}yield{
//doSomething(x) - only for the ones that holds the predicate
x
}
ので、私は)それは戻り値の型アレイ[コンストラクタ[_]]対(配列[方法]とは何かを持って推測している動作します... ?
回答:
はflatMap - アレクセイ・ロマノフ(pamuの助けを借りて)理解のための
答え:
for{
x <- c.getConsturctors
_ = doSomething(x)
if predicate(x)
}yield x
doSomethingと述語が正確に間違っていることを伝えるための詳細情報が必要 – pamu
doSomethingはxを出力し、述語は真を返します。 –