2014-02-20 2 views
0

리플렉션을 사용하여 deep equals 비교를 구현하려고합니다. 그 때문에 런타임에 주어진 객체에 목록을 찾아야합니다 (이 객체 아래의 예제에서는 Foo이라고 함).스칼라 리플렉션 : 지정된 유형의 val을 찾는 방법?

내 느낌은 그러나 나는 listslist1list2를 가리키는 기호를 포함하도록 ??? what should go here ??? 부분에 넣어 무엇을 알아낼 수 없습니다, 아래 코드는 올바른 방향으로 가고 있다는 것입니다?

??? what should go here ???listType을 입력하면 lists이 비어있게됩니다.

는 (아래 인 IntelliJ 스칼라 워크 시트에서 가져온 코드가있는 나는 가능한 솔루션을 실험했다.)

당신이 val에 관심이 있다면
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 ???) 

답변

2

는 S :

val lists = theType.members.filter { 
    m => m.isTerm && m.asTerm.isVal && m.typeSignature <:< listType 
} 

을 수 여기에는 접근 가능한 구성원 만 포함된다는 것을 알고 있어야합니다.

관련 문제