Java 扩展Reader类:如何编写close()?

Java 扩展Reader类:如何编写close()?,java,file-io,Java,File Io,在Java中,我试图为抽象类编写一个子类。我正在尝试实现Reader的close()方法。我打算编写的子类Reader2将把来自原始读取器的输入(通过调用ReaderObj.read()获得)转换为其他内容,以便在Reader2对象上调用read()将输出转换后的字符 例如,这会将所有小写字母“a”、“b”和“c”转换为相应的大写字母,其余字母保持不变: Reader in = new InputStreamReader (System.in); Reader2 translated = new

在Java中,我试图为抽象类编写一个子类。我正在尝试实现Reader的close()方法。我打算编写的子类Reader2将把来自原始读取器的输入(通过调用ReaderObj.read()获得)转换为其他内容,以便在Reader2对象上调用read()将输出转换后的字符

例如,这会将所有小写字母“a”、“b”和“c”转换为相应的大写字母,其余字母保持不变:

Reader in = new InputStreamReader (System.in);
Reader2 translated = new Reader2(in, "abc", "ABC");
while (true) {
    int x = translated.read;
    if (x == -1) {
        break;
    }
    System.out.print((char x));
}
我已经实现了read(),但我不知道如何实现close()

根据文档,close()方法应该关闭流并抛出IOException。但我不知道如何关闭流或抛出IOException。我应该如何重写close()

您创建了一个输入流读取器,并将其传递给翻译后的读取器。要关闭Reader2实例,只需在构造函数
new Reader2(in,“abc”,“abc”)传递给Reader2实例的in Reader上调用close()方法

您创建了一个输入流读取器,并将其传递给翻译后的读取器。要关闭Reader2实例,只需在构造函数
new Reader2(in,“abc”,“abc”)传递给Reader2实例的in Reader上调用close()方法


你到底想完成什么?而且,你不必扔,只要有必要,你可以扔。你写读者是为了什么?如何“关闭流”将完全取决于此。我正在尝试实现Reader的close()方法。我打算编写的子类Reader2将把来自原始阅读器的输入(通过调用ReaderObj.read()获得)转换为其他内容。如果您甚至不知道如何抛出异常,则可能不应该编写Reader子类。我认为你最好的选择是首先大量学习java。你的读者是干什么的?你到底想完成什么?而且,你不必扔,只要有必要,你可以扔。你写读者是为了什么?如何“关闭流”将完全取决于此。我正在尝试实现Reader的close()方法。我打算编写的子类Reader2将把来自原始阅读器的输入(通过调用ReaderObj.read()获得)转换为其他内容。如果您甚至不知道如何抛出异常,则可能不应该编写Reader子类。我认为你最好的选择是首先大量学习java。你的阅读器是做什么的?最初的阅读器是如何关闭的?我看了一下文档,读者结语是抽象的——它没有实现。我查看了Reader的超类——接口Closeable——它也没有close的实现@毛泽东: 无论最初的读者是如何接近的;只需让
类InputStreamReader
自行完成即可。您不必担心它,因为您的
Reader2
不是
Reader
的子类。这是因为在您的类中有一个
Reader
实例,并不意味着您的类突然成为
Reader
本身。否则,事实上你的房子里有一台电视意味着你的房子也是一台电视:)最初的读者是如何关上的?我看了一下文档,读者结语是抽象的——它没有实现。我查看了Reader的超类——接口Closeable——它也没有close的实现@毛泽东: 无论最初的读者是如何接近的;只需让
类InputStreamReader
自行完成即可。您不必担心它,因为您的
Reader2
不是
Reader
的子类。这是因为在您的类中有一个
Reader
实例,并不意味着您的类突然成为
Reader
本身。否则,事实上你的房子里有一台电视意味着你的房子也是一台电视:)
Reader in = new InputStreamReader (System.in);
Reader2 translated = new Reader2(in, "abc", "ABC");
public void close() { in.close(); }