2014-12-05 3 views
0

엄격한 유형 요구 사항을 준수하는 한 데이터를 가져 와서 다른 가상 위치에서 추출하는 maven 종속성을 통해 서비스를 구현하고 있습니다. 그러나 필드 중 하나를 바꿨습니다 (필드 Buzz을 호출하고 구현을 Buzzer)하고 나머지 서비스와 함께이 작업을 수행 할 수 있는지 궁금합니다.구현 된 메서드에서 반환 형식을 해킹하는 가장 좋은 방법은 무엇입니까?

서비스는 Buzz 유형이 필요하고 BuzzBuzzer 사이의 차이가 몇 가지 추가 된 회원 필드입니다. 공장에서 수락 할 수있는 해킹이 있습니까 Buzzer? 코드를 살펴보면, 서비스는 Buzz의 해시 코드에 종속적 인 작업을 수행하는 것으로 보이지 않습니다.

편집 : 예

class Buzz 
{ 
    public String ID 
    public String name 
    public String title 
    public Iterable<profile> profiles 


    public myConstructor(String ID, String name, String title, Iterable profile) 
    { 
    this.var = var; 
    } 
} 

class Buzzer 
{ 
    public String ID 
    public String name 
    public String title 
    public profile profiles 

    public myConstructor(String ID, String name, String title, profile profiles) 
    { 
    this.var = var; 
    } 
} 

profile 정의 된 개체

+1

당신은 프레임 워크가 Buzzer', 당신이 Buzzer'이'Buzz'을 확장'가질 수있는 생각하고 있어요'에 그 여분의 필드에 대해 걱정하지 않는 특정 경우 . – Makoto

+0

'Buzzer'가'Buzz'를 확장시킬 수 없습니까? – Mureinik

+0

그걸 시도했지만, "버즈에 기본 생성자가 없습니다"라고 대답했습니다. –

답변

1

당신이 부저가 버즈를 확장 할 수있는 경우, 그 이상적 일 것이다에게 있습니다.

그러나 (예를 들어 타사 라이브러리에서 최종 클래스로 선언 된 경우) 해킹 솔루션은 특정 장면에만 의존하는 버즈 인스턴스를 '획득'하는 것입니다. 더 자세한 정보가 필요합니다.) 그리고 반사를 통해 버즈 속성을 수정하십시오. 이 같은

뭔가 :

String buzz = null; // Assuming Buzz field is a string in this example 
Field fBuzz = null; 
try 
{ 
    Class<?> cBuzz = theBuzzInstance.getClass(); 
    fBuzz = cBuzz.getDeclaredField("buzz"); 
    fBuzz.setAccessible(true); 
    buzz = (String) fBuzz.get(theBuzzInstance); 

    String newBuzz = "Hacked!"; 
    fBuzz.set(theBuzzInstance, newBuzz); 
} 
catch(Exception e) 
{ 
    // TODO: Error handling 
} 
관련 문제