2013-07-20 3 views
1

SingletonASingletonB의 클래스가 난독 화 된 jarfile에 있습니다. 그들은 동일한 인터페이스를 구현하지 않으며 동일한 수퍼 클래스의 자식이지만 원래 프로그래머가 놓친 유사한 특성을 가지고 있습니다. 이후편집 할 수없는 싱글 톤 클래스를 래핑

:

public void method(SingletonObject singleton) { 
    //do stuff with singleton 
} 

그러나 일하는 것이 내가 그 생각을 할 수있는 유일한 것은 이것이다 :

는이 같은 방법에 인수로 전달할 수 있도록하려면 하단의 예는 끔찍합니다. 어떻게하면 상단처럼 보이게 할 수 있습니까?

+0

싱글 톤이 작고 유스 케이스가 많은 경우 외부에 공유 된 p가있는 래퍼를 만들 수 있습니다 roperties를 사용하지만 두드러기가 감싸는 싱글 톤의 유형에 대한 결정을 내릴 수 있습니다. 그러나 싱글 톤이 크고 사용 사례가 적다면 현재의 방법이 더 좋습니다. – Ted

답변

2

당신이 특정 방법이 2 개 개의 다른 클래스에 대한 존재한다는 것을 알고 있다면, 당신은

public void method(Object singleton) { 
     Class<?> clazz = singleton.getClass(); 
     Method m; 
     try { 
      m = clazz.getDeclaredMethod("someCommonMethod"); 
      //m.setAccessible(true); 
      m.invoke(singleton); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+0

그리고 반사는 그 날을 저장합니다. 감사! –

1

이 구성은 또한 옵션이 될 수 반사 사용할 수 있습니다

class SingletonObject{ 
    SingletonA a; 
    SingletonB b; 

    SingletonObject(SingletonA a, SingletonB b){ 
     if(a==null && b==null){ 
      throw InvalidArgumentException(); 
     } 
     this.a = a; 
     this.b =b 
    }  

    public void callCommonMethod(){ 
     if(a!=null){ 
      a.callCommonMethod(); 
     }else{ 
      b.callCommonMethod() 
     } 
    } 
} 

그래서 당신은 구성된 단일 객체에 아무도 모르는 사이에 아무도 그것을 사용할 수없는 하나의 클래스

관련 문제