2014-07-24 5 views
1

내 서비스의 메소드가 작동하기를 원하는 두 개의 도메인 클래스가 있습니다. 서비스 메소드는 두 객체 모두와 매우 유사한 작업을 수행하며, 함께 사용되는 객체의 속성은 동일한 이름을 가진 두 객체에 있습니다. 그래서, 대신에이 같은 두 가지 방법을 만드는 :Groovy 메서드 오버로드

calculateTotalBalancesInd(IndividualRecord indRec) { 
    //do something with indRec.accountsList 
} 
calculateTotalBalancesEnt(EntityRecord entRec) { 
    //do something with entRec.accountsList 
} 

중 하나 객체에서 작동 할 수 있습니다 하나의 방법을 만드는 (? 과부하) 깔끔한 방법이 있습니까?

고맙습니다.

답변

5

Groovy에는 오리 타이핑이 있습니다. 간단하게 다음과 같이 귀하의 방법을합니다

def calculateTotalBalancesEnt(rec) { 
    rec.accountsList 
} 

오리 입력 여기에 설명 : http://www.objectpartners.com/2013/08/19/optional-typing-in-groovy/

또 다른 방법을, 아마 조금 더 안전 :

위의 방법을 만들 수 있지만, 비공개과에서 호출 당신이 정의한 공개 메소드 모두. 이렇게하면 API는 정적으로 형식이 정해지지 만보다 구현 성이 뛰어납니다.

1

adam0404의 대답에 따라 오리 타이핑 외에도 스위치를 사용하여 유형별 작업을 통합 할 수 있습니다. Groovy의 switch 문은 인스턴스 유형의 디스패치를 ​​지원합니다.

def calculateTotalBalancesEnt(rec) { 
    // common operations on rec.accountsList 

    switch (rec) { 
     case IndividualRecord: 
      // IndividualRecord specific 
      break 
     case EntityRecord: 
      // EntityRecord specific 
      break 
    } 
}