반환 형식에서 제네릭을 사용하는 경우 부모 클래스를 확장하는 데 어려움이 있습니다 다음 예제와 같습니다.Java에서 일반 반환 형식을 사용하는 메서드 재정의
알다시피 제네릭 없이는 다음 예제는 정상적으로 컴파일되지만 유형이 Object 여야하므로 유형 안전하지 않습니다.
제가 참조 할 수있는 명확한 해결책 (또는 패턴 또는 조언, 도움이 될만한 것이 있습니까?)이 있습니까?
class AbstractReader<T>{
public abstract T readNext();
}
class ByteArrayReader extends AbstractReader<byte[]>{
@Override
public byte[] readNext(){ /*...*/ }
}
class StringReader extends ByteArrayReader {
@Override
public String readNext() {
/* The return type is incompatible
with ByteArrayReader.readNext()! */
return new String(bytes);
}
}
귀하의 조언에 감사드립니다. 나는 또한 작곡을 사용하는 것이이 경우에 최선이라고 생각한다. 그러나 StringReader와 ByteArrayReader가 여러 메서드를 공유하면 Decorator는 다음과 같은 반복 코드를 갖게됩니다. 'ReturnType someMethod (Arg args) {byteArray.someMethod(); }' 불가피 할 것입니까? – nephilim
예, 반복적 인 코드가 발생할 수 있지만 더 깨끗한 구현이 가능합니다! – claymore1977