簡體   English   中英

如何在Java中創建自定義閱讀器類

[英]How to Create a Custom Reader Class in Java

我想通過將java.io.Reader類作為子類來創建CustomReader類。 我的CustomReader將環繞另一個BufferedReader ,從中讀取實際的輸入,並從中添加我自己的輸入翻譯,並將其返回給調用者。 (它稱為裝飾器模式嗎?)

Javadoc說只有Reader類的closeread(char[] cbuf, int off, int len)是抽象方法,而其他不是。 但是,從java.io.Reader繼承的其他這些非抽象方法中,我可以期望什么樣的默認實現? 例如,如果有人調用從Reader類繼承的read() ,它會調用read(char[] cbuf, int off, int len)來獲取輸入嗎? 另外,標准Readerready()方法如何確定其返回值? 由於它不是抽象的,因此我不必提供實現。

我是否真的需要將所有從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM