[英]Java: How to create new class object for Reader class from java.io when it has protected constructor
[英]How to Create a Custom Reader Class in Java
我想通過將java.io.Reader
類作為子類來創建CustomReader
類。 我的CustomReader
將環繞另一個BufferedReader
,從中讀取實際的輸入,並從中添加我自己的輸入翻譯,並將其返回給調用者。 (它稱為裝飾器模式嗎?)
Javadoc說只有Reader
類的close
和read(char[] cbuf, int off, int len)
是抽象方法,而其他不是。 但是,從java.io.Reader
繼承的其他這些非抽象方法中,我可以期望什么樣的默認實現? 例如,如果有人調用從Reader
類繼承的read()
,它會調用read(char[] cbuf, int off, int len)
來獲取輸入嗎? 另外,標准Reader
的ready()
方法如何確定其返回值? 由於它不是抽象的,因此我不必提供實現。
我是否真的需要將所有從Reader
繼承的方法轉發到我包裝的BufferedReader
-是否抽象?
從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的源代碼。 並為自定義閱讀器的所有方法(無論是否繼承)編寫單元測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.