0

私が使用しているいくつかのリフレクションメソッドがあります:

  def typeMirror = runtimeMirror(this.getClass.getClassLoader)
  def instanceMirror = typeMirror.reflect(this)
  def members = instanceMirror.symbol.typeSignature.members

メンバーから、私はこのようなことをしようとしています (これが正しくないことは理解していますが、成功せずにさまざまな方法を試しました):

  def modelMembers = members.filter(member => member.typeSignature == Model)

Model はスーパークラスです。問題は、サブクラスの typeSignature しか把握できないように見えることです。モデルのサブクラスであるかどうかに基づいてメンバーをフィルタリングするにはどうすればよいですか?

4

3 に答える 3

0

少しハックが見つかりました。誰かがより具体的な方法を知っているなら、私はそれを見てみたい.

  def modelMembers = {
    val filtered = members.filter(member => member.typeSignature.baseClasses.size > 0 && member.isTerm && !member.isMethod)
    filtered.filter(_.typeSignature.baseClasses.exists(_.name.toString == "Model"))
  }
于 2013-11-05T01:50:58.033 に答える