我正在尝试使用反射实现深度等于比较。
为此,我需要在运行时给出的对象中找到列表(在下面的示例中,此对象称为Foo
)。
我的感觉是下面的代码朝着正确的方向发展,但我无法弄清楚要放入??? what should go here ???
部分的内容,以致lists
包含指向list1
的符号和list2
?
如果我只是将listType
放入??? what should go here ???
,那么lists
就会变空。
(下面的代码取自我正在尝试可能的解决方案的IntelliJ Scala工作表。)
import scala.reflect.runtime.universe._
import java.util
class Foo{
val one=1
val list1=new util.ArrayList[Int]
val list2=new util.ArrayList[Int]
}
val foo=new Foo
val m= runtimeMirror(getClass.getClassLoader)
val theType =m.reflect(foo).symbol.toType
val listType = typeOf[util.List[_]]
val lists=theType.members.filter( _.typeSignature == ??? what should go here ??? )
答案 0 :(得分:2)
如果您只对val
感兴趣:
val lists = theType.members.filter {
m => m.isTerm && m.asTerm.isVal && m.typeSignature <:< listType
}
请注意,这仅包括可访问的成员。