Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何从MemberScope反射中查找超类_Scala_Reflection_Scala 2.10 - Fatal编程技术网

Scala 如何从MemberScope反射中查找超类

Scala 如何从MemberScope反射中查找超类,scala,reflection,scala-2.10,Scala,Reflection,Scala 2.10,我使用了几种反射方法: def typeMirror = runtimeMirror(this.getClass.getClassLoader) def instanceMirror = typeMirror.reflect(this) def members = instanceMirror.symbol.typeSignature.members 从各位成员那里,我正在尝试这样做(我知道这是不正确的,但我尝试了各种方法,但都没有成功): 其中Model是超级类。问题是,我似乎只

我使用了几种反射方法:

  def typeMirror = runtimeMirror(this.getClass.getClassLoader)
  def instanceMirror = typeMirror.reflect(this)
  def members = instanceMirror.symbol.typeSignature.members
从各位成员那里,我正在尝试这样做(我知道这是不正确的,但我尝试了各种方法,但都没有成功):


其中Model是超级类。问题是,我似乎只能找出次分类的类型签名。如果成员是模型的子类,我如何根据它们筛选成员?

这似乎对我有用

package load.data

abstract class AbstractPoint
case class Point() extends AbstractPoint

object ModelTest {
  def main(arg: Array[String]) =
    {
      val li = List(new Point())
      assert(li.filter(_.isInstanceOf[AbstractPoint]).length == 1)
    }
}

发现了一点小问题。如果有人知道一个更具体的方法,我很乐意看到

  def modelMembers = {
    val filtered = members.filter(member => member.typeSignature.baseClasses.size > 0 && member.isTerm && !member.isMethod)
    filtered.filter(_.typeSignature.baseClasses.exists(_.name.toString == "Model"))
  }

有一个非常方便的
typeOf[X].members.filter(u.typeSignature nah似乎不起作用。我知道这是可行的。我遇到的问题与反射有关。我不知道如何判断Symbol对象是否是我的基类。你尝试过反射代码吗?显然,你这里的示例会起作用,但这不是我试图实现的。我不知道应该包含这种方法ing reflections?我的意思是,对于您的特定问题,不一定需要反射,或者我搞错了吗?def members=instanceMirror.symbol.typeSignature.members返回一个MemberScope,其中包含一个类型符号列表,我似乎不知道如何关联该符号,也不知道它是否是我的模型基类。
  def modelMembers = {
    val filtered = members.filter(member => member.typeSignature.baseClasses.size > 0 && member.isTerm && !member.isMethod)
    filtered.filter(_.typeSignature.baseClasses.exists(_.name.toString == "Model"))
  }
def modelMembers = members.filter(_.typeSignature <:< typeOf[Model])
trait A
class B extends A
class C extends A

class X {
  val hello: C = null
  var world: B = null
}
scala> import reflect.runtime.universe._
import reflect.runtime.universe._

scala> typeOf[X].members.filter(_.typeSignature <:< typeOf[A])
res0: Iterable[Symbol] = SynchronizedOps(variable world, value hello)