자바

2017-12-02 1 views
0

나는 다음과 같은 인터페이스를 가지고 말해 특정 유형의 슈퍼 클래스의 일반적인 방법을 확장?자바

@Override 
public <Graphics> void setBackingGraphics(Graphics t) { 
    ... 
} 

"그래픽"이 다른 자리 표시 자로 간주되므로 분명히 작동하지 않습니다. 실제로 그것을 "사용 가능"하게 만드는 방법은 무엇입니까? 예를 들어 제네릭 클래스를 사용하여 의미하는 바를 보여 드리겠습니다.

public interface A<T> { 
    T someT(); 
} 
public class C extends A<B> { 
    B someT(){...} 
} 

어떻게하면 특정 메서드에만 적용 할 수 있을까요? 그래서 당신이 할 수있는 유일한 방법은

+2

귀하의 운전 방식을 d' public void setBackingGraphics (T t);는 어떤 렌더러에 대해서도'T'의 값에 대해'setBackingGraphics (T)'를 호출 할 수 있다고 주장합니다. 이것은, 범용적인'setBackingGraphics (Object)'를 가지는 것과 동등하지만, Renderer의 정의를 깨지 않으면 서, Renderer가 더 명확하지 않을 수 있습니다. 하위 인터페이스에 추가하기 만하면됩니다. –

답변

0

당신은 어떤 ObjectRenderersetBackingGraphics를 호출 할 수 있어야합니다 :

@Override 
public void setBackingGraphics(Object t) { 
} 

당신이 원하는 경우 예를 들어, 매개 변수를 바인딩해야하는 더 구체적인 뭔가 :

public interface Renderer { 
    public <T extends String> void setBackingGraphics(T t); 
} 

그리고 당신은 할 수 있습니다 :

@Override 
public void setBackingGraphics(String t) { 
} 
+0

아, 그건 몰랐어. 너무 나빴어. 답변을 주셔서 감사합니다! (작은 후속 질문 : 'setBackingGraphics (Object o) {if (o instanceof WhateverIWant)}가 내 하위 클래스에서 새로운 IllegalArgumentException() ...'을 던지는 것과 같은 것을 사용하는 것이 좋을까요? –

+0

@GandalfSmith 아니요, 일반적으로 'instanceof'를 사용하는 것은 좋은 습관이 아닙니다. – Oleg

+0

흠, 다른 클래스를 변경하지 않고도 수업의 내부를 전환 할 수있는 방법은 무엇입니까? –