2012-02-08 3 views
0

타사 서비스 클래스에서 작동하는 "사용"할 범주 클래스가 있습니다. 서비스 클래스에는 xxxRequest 클래스와 xxxResponse 클래스가 있으며 xxx 호출마다 데이터에 대한 추가 자식 클래스가 있습니다.카테고리를 사용하여 관련 카테고리를 "부트 스트랩"할 수 있습니까?

동일한 범주로 서비스 범주가 적용될 때 동시에 각 추가 클래스에 범주를 자동으로 적용하려고합니다.

사용 카테고리에있는 모든 카테고리 클래스를 나열 할 수는 있지만 많이 있지만 그 세부 사항을 드러내고 싶지는 않습니다. 기본 클래스는 제어 할 수 없으므로 @ category/@ mixin을 사용할 수 없습니다.

현재 믹싱 호출 시리즈 (홀수 추가 생성자 추가)를 수행하는 서비스 카테고리에 정적 초기화 메서드가 있습니다. 이 작동하지만, 내가 원하는 범위를 제공하지 않습니다.

내가 놓친 쉬운 방법이 있습니까?

답변

2

나는 당신이하려는 것을 이해하고 있는지 잘 모르겠습니다. 동일한 코드 블록에서 많은 카테고리를 한꺼번에 use에 보내려고 시도하지만 사용하고 싶을 때마다 모든 카테고리를 나열하고 싶지 않습니다. 길이가 use 인 대신 코드 블록 (Closure)을 매개 변수로 취한 다음이 메서드를 긴 메서드 use 대신 사용하는 메서드 내에서 use을 길게 만듭니다. 뭔가 같이 :이 바보 예에서

@Category(String) 
class ShoutCategory { 
    def shout() { 
     this.toUpperCase() + '!' 
    } 
} 

@Category(Integer) 
class ToEnglishCategory { 
    def toEnglish() { 
     // Only works for integers in 0..5 for now... 
     ['zero', 'one', 'two', 'three', 'four', 'five'][this] 
    } 
} 

def useAwesomeExtensions(Closure cl) { 
    use (ShoutCategory, ToEnglishCategory) { 
     cl() 
    } 
} 

useAwesomeExtensions { 
    // Here we can do all sorts of magic things. 
    println 3.toEnglish().shout() // Outputs "THREE!" 
} 

// "hello".shout() -> Would throw a MissingMethodException here 

, 문자열 및 정수 클래스 기능을 보강하려는 클래스가 될 것입니다하지만 당신은에 액세스 할 수없는, 그리고 무리를 포함하는 큰 범주와 같은 useAwesomeExtensions 행위 다른 카테고리 중. 희망이 그게 도움이 :)

+0

그걸 사용하는 말을 제외하고 (AwesomeExtensions) 및 별도의 폐쇄 대신 ShoutCategory 및 ToEnglishCategory를 설정 AwesomeExtensions 카테고리를 제외하고 내가 원하는 일종이다 –

+0

@MichaelRutherfurd 그래, 나는'@Mixin '카테고리를 더 큰 카테고리로 섞으려고했지만 작동하지 않는 것 같았다. 사용법이 약간 다르긴하지만,이 솔루션이 당신이 달성하고자하는 것에 적응합니까? – epidemian

관련 문제