Google Web Toolkit을 사용하고 있으며 일반 인터페이스 구현에 문제가 있습니다. 나는 제네릭에 익숙하지 않고 다른 사람의 코드를 여기에서 업그레이드했다.일반 인터페이스를 구현하는 클래스의 서브 클래스
다음과 같이하고 싶습니다. 특정 콜백 시나리오를 처리하기 위해 일부 로깅을 수행 한 다음 해당 구현을 서브 클래스 화하는 일반 콜백 인터페이스 구현을 원합니다.
public interface AsyncCallback<T> {
void MethodFromAsyncCallback(T result);
}
추상과 콘크리트 구현
은 다음과 같이 보일 : 콜백이public interface MyServiceAsync {
public void DoSomeThing(AsyncCallback<Integer>);
}
에서 발사 할 필요
class CallbackBase implements AsyncCallback<Object> {
public abstract void doStuff(Object result);
public void MethodFromAsyncCallback(Object result) {
// IMPORTANT STUFF
// here are things I would like to do for all callbacks, hence the superclass.
// Then we do the subclass specific things.
doStuff(result);
}
}
class SpecificCallback extends CallbackBase
{
public void doStuff(Object result) {
Integer i = (Integer)result;
// do stuff with i
}
}
인터페이스는이 같은 것입니다 그런 다음이 모든 전화가 함께 표시됩니다.
MyServiceAsync myService = (MyServiceAsync)GWT.create(MyServiceAsync.class);
myService.DoSomeThing(new SpecificCallback());
여기에 문제가 있습니다. GWT.create()
내가 만든 인터페이스를 구현하는 경우
, 그것은 AsyncCallback
에게 주어진 유형이 지정된 것을 요구 따라서 DoSomething(AsyncCallback<Integer>)
정수가 아닌 객체를 만들고, (이 질문의 범위를 벗어난, 다른 유형 일치). 이것은 내 통제 범위를 벗어납니다.
DoSomething()
은 AsyncCallback<Integer>
입니다. 나는 무언가로부터 상속받은 어떤 것을주고있다. 즉 AsyncCallback<Object>
이다. 제네릭으로, 상속의 개념은 다소 부러 졌을까요? , DoSomething()
그 SpecificCallback
이 요구 사항의 충족 인식 할 수 있도록 내가 함께이 개 썰매의 수 어떻게 관계를 구조화 할 수있는 방법
또는
어느 :
그래서 제 질문은 이것이다 CallbackBase
과 SpecificCallback
사이에서 중복 코드를 피할 수 있지만 SpecificCallback
은 AsyncCallback<Integer>
을 직접 구현합니까?
감사합니다.
class SpecificCallback extends CallbackBase<Integer> {
public void doStuff(Integer result) {
// no need to cast
// do stuff with result
}
}
이 그런 다음 DoSomething
방법은을 받아들이 :
abstract class CallbackBase<T> implements AsyncCallback<T> {
public abstract void doStuff(T result);
public void MethodFromAsyncCallback(T result) {
// general stuff (T is a subclass of Object)
doStuff(result);
}
}
그런 다음 당신은 특정 콜백이처럼되고 싶어 : 나는 당신이 할 필요가 있다고 생각 무엇
아름다움을, 감사합니다! – Ipsquiggle
Re : 편집. 그렇습니다. 많은 의미가 있습니다. 나는 그것을 처음에 그런 것으로 바꾸고 싶었지만 한 번에 한 단계 씩 혼란을 해결할 것이라고 생각했습니다. ;) – Ipsquiggle
가능한 두 가지 유형을 설명하기 위해 이들 중 하나를 확장 할 수 있습니까? 예 : 개념적으로 '구현 AsyncCallback, AsyncCallback '? –
Ipsquiggle