2017-01-06 2 views
0

일반적으로 클래스에 주어진 모든 인수/생성자 매개 변수를 가져올 수 있습니까? 같은스칼라에서 클래스에 전달 된 모든 인수 가져 오기

뭔가 :

trait GetMyArgs { 
    def myArgs = ??? 
} 

class Foo(i: Int, d: Double) extends GetMyArgs 

=>

scala> val f = new Foo(5, 6.6) 
scala> f.myArgs 
(5, 6.6) // or similar 
+2

무엇을하려는 것입니까? 리플렉션을 사용하는 것은 일반적으로 권장하지 않습니다. – daydreamer

+0

은 http://scalameta.org/에서 보입니다. – pedrorijo91

+0

감사합니다. @daydreamer 필자는 기본적으로 메모 화의 형태를 취하고 있습니다.지도로 함수를 구현하여이를 수행하는 좋은 방법이 있지만, 암기에 기존 기능을 혼합 할 수 있다는 좋은 성질을 가지고 있습니다. – spiffman

답변

0
def myArgs = { 
    this.getClass.getDeclaredFields 
     .toList 
     .map(i => { 
     i.setAccessible(true) 
     i.getName -> i.get(this) 
     }).toMap 
    } 

당신은 그냥 사용할 수 있습니다 자바reflection이 작업을 수행합니다. 하지만 변수가 사용되지 않고 생성자 param이 val이 아닌 경우 은 비어Map을 출력합니다.

+0

감사합니다. 그것은 실제로 사용되지 않거나 내 경우 구성원으로 저장되는 변수를 포함하지 않는 좋은 속성입니다. 내가 찾고 있던 것은 본질적으로 생성 된 클래스의 특정 인스턴스에 대한 "지문"입니다. 따라서 일부 변수는 다르지만 클래스가 동일하면 똑같은 지문을 사용해야합니다. – spiffman

+0

예, 이것은 본질적으로 case 클래스에 대해'hashCode' 함수가하는 것임을 주목해야합니다. – spiffman

관련 문제