我希望通过继承CustomReader
类来创建我的java.io.Reader
类。我的CustomReader
将包围另一个BufferedReader
,其中读取了实际输入,并从中添加了我自己的输入翻译并返回给我的调用者。 (它被称为装饰器模式吗?)
javadoc表示只有close
类的read(char[] cbuf, int off, int len)
和Reader
是抽象方法,但其他方法则不是。{1}}类。但是,从java.io.Reader
继承的其他非抽象方法,我可以期待什么样的默认实现呢?例如,如果某人调用从read()
类继承的Reader
,是否会调用我的read(char[] cbuf, int off, int len)
实现来获取输入?另外,标准Reader
的{{1}}方法如何确定其返回值?因为它不是抽象的,我不需要提供实现。
我是否真的需要将所有继承的方法从ready()
转发到Reader
我环绕 - 是抽象还是不抽象?
答案 0 :(得分:0)
从java.io.Reader继承的其他非抽象方法可以期待什么样的默认实现?
如果您覆盖的方法也尊重合同,您可以期望在javadoc中遵守合同的实现。
例如,如果有人调用继承自Reader类的read(),它会调用我的read(char [] cbuf,int off,int len)来实现输入吗?
是。这是read()的实现:
char cb[] = new char[1];
if (read(cb, 0, 1) == -1)
return -1;
else
return cb[0];
标准Reader的ready()方法如何确定其返回值?
它总是返回false。
我是否真的需要将所有继承的方法从Reader转发到我带回的BufferedReader
你需要确保他们按照自己的意愿行事。但是因为他们已经委托给你自己委托给包装读者的抽象方法的实现,所以可能没有必要覆盖它们。
我的建议:请不要犹豫,阅读Reader的源代码。并为自定义阅读器的所有方法(包括或未继承)编写单元测试。