Java:如何从Java.io为Reader类创建新的类对象(当它保护构造函数时)
我想为java的Reader类创建一个新的类对象,但是我无法访问构造函数,因为它是受保护的 这是行不通的Java:如何从Java.io为Reader类创建新的类对象(当它保护构造函数时),java,class,constructor,protected,Java,Class,Constructor,Protected,我想为java的Reader类创建一个新的类对象,但是我无法访问构造函数,因为它是受保护的 这是行不通的 通常,我会创建一个新函数来访问该构造函数,但由于该函数是java默认库的一部分,我如何访问它?感谢您的帮助。Reader是一个抽象类。您不能实例化它,只是为了创建子类实例 你是说 Reader myReader = new InputStreamReader(in, "UTF-8"); 是一个抽象类,因此您必须实例化它的实现,例如or。正如其他人所说,您可以创建Reader的子类的实例,
通常,我会创建一个新函数来访问该构造函数,但由于该函数是java默认库的一部分,我如何访问它?感谢您的帮助。Reader是一个抽象类。您不能实例化它,只是为了创建子类实例 你是说
Reader myReader = new InputStreamReader(in, "UTF-8");
是一个抽象类,因此您必须实例化它的实现,例如or。正如其他人所说,您可以创建
Reader
的子类的实例,例如BufferedReader
如果您不想使用Reader的子类,您可以创建Reader
的实例,如下所示
Reader reader = new Reader() {
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
// TODO Auto-generated method stub
return 0;
}
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
}};
如果选中,您可以看到Reader
的具体子类,并根据您的需求对其中任何一个进行初步分析。你不能像它是抽象的那样,使用即时的Reader
BufferedReader
CharArrayReader
FilterReader
InputStreamReader
PipedReader
StringReader这里有个问题要问你。当您调用
read()
时,您期望Reader类的(假设的)实例实际会做什么?它从何处获得字符?+1,用于演示子类(这是一个匿名的子类)可以调用受保护的构造函数。@Thilo感谢您的评论。是的,它实际上创建了一个匿名子类实例。当然,子类实例是超类实例。本例中的“in”是什么?in
是InputStreamReader应该从中读取的InputStream当我运行此操作时,它给出了错误“在中找不到符号”。此处中的未定义,因此通过导入导入静态java.lang.System.in来解决此问题,后者执行此任务。
Reader reader = new Reader() {
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
// TODO Auto-generated method stub
return 0;
}
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
}};