Java:当具有受保护的构造函数时,如何从 java.io 为 Reader 类创建新的类对象
Posted
技术标签:
【中文标题】Java:当具有受保护的构造函数时,如何从 java.io 为 Reader 类创建新的类对象【英文标题】:Java: How to create new class object for Reader class from java.io when it has protected constructor 【发布时间】:2012-09-08 18:07:40 【问题描述】:我想为 java 的 Reader 类创建一个新的类对象,但我无法访问构造函数,因为它受到保护。
Reader Class Description
Reader myReader = new Reader();
不会工作。
通常,我会创建一个新函数,该类来访问该构造函数,但由于该函数是 java 默认库的一部分,我该如何访问它?感谢您的帮助。
【问题讨论】:
这是一个问题。当您调用read()
时,您期望 Reader 类的(假设的)实例实际上会做什么?它会从哪里得到角色?
【参考方案1】:
Reader 是一个抽象类。您不能实例化它,只能用于创建子类实例。
你是说
Reader myReader = new InputStreamReader(in, "UTF-8");
【讨论】:
这个例子中的“in”是什么?in
是 InputStreamReader 应该读取的 InputStream。
我有这个BufferedReader br=new BufferedReader(new InputStreamReader(in));
,运行它时出现错误“找不到符号in
”。
这里 in
是未定义的,所以通过导入 import static java.lang.System.in
解决了这个问题。【参考方案2】:
Reader
是一个抽象类,所以你必须实例化它的一个实现,比如BufferedReader
或者InputStreamReader
。
【讨论】:
【参考方案3】:正如其他人所说,您可以创建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
;
【讨论】:
+1 用于演示子类(这个是匿名的,尽管它可能是匿名的)可以调用受保护的构造函数。 @Thilo 感谢您的评论。是的,它实际上创建了一个匿名子类实例。当然,子类实例就是超类实例。【参考方案4】:如果您检查Reader Java Doc,您可以看到Reader
的具体子类,根据您的要求初步分析其中的任何一个。您不能像 abstract
那样即时化 Reader
BufferedReaderCharArrayReaderFilterReaderInputStreamReaderPipedReaderStringReader
【讨论】:
以上是关于Java:当具有受保护的构造函数时,如何从 java.io 为 Reader 类创建新的类对象的主要内容,如果未能解决你的问题,请参考以下文章
特征可以具有具有私有和受保护可见性的属性和方法吗?特质可以有构造函数、析构函数和类常量吗?
将 make_shared 与受保护的构造函数 + 抽象接口一起使用