Прежде всего позвольте мне извиниться за ужасное название, но я понятия не имел, как суммировать это в одном предложении.Передача общих типов как общих параметров метода в Java
public class GenericFun {
public class TypedStream<I extends OutputStream> {
I input;
public I getInput() { return input; }
public void setInput(I input) { this.input = input; }
}
public abstract class GarbageWriter<I extends OutputStream> {
public void writeGarbage(I output) throws Exception {
output.write("Garbage".getBytes());
}
}
public class GarbageWriterExecutor<I extends OutputStream> extends GarbageWriter<I> {
public void writeTrash(TypedStream stream) throws Exception{
this.writeGarbage(stream.getInput()); // Error
this.writeGarbage((I)stream.getInput()); // OK
}
}
}
В приведенном выше коде (OutputStream это просто пример) в классе GarbageWriterExecutor
класса в методе первой строке вызывает ошибку компиляции, а второй нет. У меня есть два вопроса по этому поводу.
- Почему
stream.getInput()
вызывает ошибку, даже еслиTypedStream.I
известно продлитьOutputStream
? - Как я могу решить эту проблему без уродливого литья?