首先让我为糟糕的标题道歉,但我不知道如何用一句话来概括这一点。
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
? - 如果没有丑陋的铸造,我该如何解决这个问题?