2013-05-17 2 views
0

doBlah 메서드를 구현하는 클래스 A이 있습니다. 서브 클래스가 AB 클래스가 있고 @Override 메소드 doBlah이 있습니다. B.doBlah에서 간단한 조작을 수행 한 후 A.doBlah으로 전화합니다.메서드 내부 동작 무시

A.doBlah은 정적 메서드 C.aStaticMethod을 호출합니다.

A 및 C는 수정할 수없는 외부 라이브러리의 일부입니다.

C.aStaticMethod 대신 A.doBlah이라는 정적 메서드 CC.aStaticMethod이 필요합니다. 가능한 모든 디자인 패턴/해킹을 사용합니까?

[편집] 나는 A의 출처를 가지고 있으며, 필자는이 파일을 내 코드에 포함시키고 필요할 경우 수정하는 등의 작업을 할 수 있습니다. 그러나 나는 A 패키지를 이와 같이 수정할 수 없습니다.

+0

@greedybuddha 어떤 수업입니까? –

+2

@greedybuddha : 이들은 * static * 메소드입니다. 그래서, 그게 효과가 없을 것입니다. 'A.doBlah'가'C.aStaticMethod'를 호출하도록 컴파일 되었다면 아무것도 변경되지 않습니다. –

+0

@sircapsalot 그래서 그는 기본적으로 클래스 A를 다시 작성하라고 제안하고 있습니까? –

답변

3

A 또는 C을 수정할 수없고 A을 직접 호출하는 경우 대답은 아니요입니다. 다른 한편으로는, 당신이 직접 A.doBlah를 호출하지 필요를 수행하는 경우

, 당신이 그것을 행동의 재정의 할 수 있습니다 자신의 클래스 (메소드가 final하지 않습니다 제공), 그리고 CC.aStaticMethod를 호출했다. 당신은 소스에 액세스 할 경우

, 당신은 아주, 아주 추악한 해킹 수행 ​​할 수 있습니다

원본과 정확히 같은 패키지에 클래스 A 만들기를, 그리고 당신이 필요 호출하는 방법을 doBlah을 수정 .

A이 외부 라이브러리에 속한 경우 이는 매우 단점이 있습니다. 즉, 실행 중이므로 해당 라이브러리에 대한 업데이트로 인해 코드가 손상되는지 여부를 알 수 없습니다 A의 이전 버전 기본적으로이 접근법은 유지 보수의 악몽으로 빠르게 변할 수 있다고합니다.