【发布时间】:2015-04-22 23:01:48
【问题描述】:
是否有任何方法可以实现 StringReader 类,该类允许在不更改任何功能(方法)的情况下重用具有多个字符串的相同 StringReader(或类似功能)对象?
例如,这样的 Java 类(例如,ReusableStringReader)将是 java.io.StringReader 的子类,并带有一个额外的方法,例如
public void reset(String str);
这会将新字符串值分配给内部StringReader 参数,以便所有后续调用StringReader 的read() 方法使用新值。当想要限制应用程序使用的对象数量(例如,通过Reader 对象每秒处理大量字符串的应用程序)时,这种“可重用性”非常方便。
实现这一目标的一般方法是:
- 继承。 StringReader 的所有内部状态都存储在私有实例变量中,所以这不是一个选项。
-
反射。 通过反射重置
StringReader对象的内部状态。有 4 个实例变量需要设置,这意味着每个“reset(String)”调用需要 4 个反射调用(效率不高)。 -
组合。 可以使用可重用的
StringInputStream并通过InputStreamReader创建一个Reader对象,然后在StringReader的子类内部使用该Reader,以实现完整StringReader类的 API。不过,这确实是一个 hack。
有更好的解决方案的想法吗?
【问题讨论】:
-
请移除“离题”限制。这是一个关于解决现实世界问题的潜在实现的非常有效的问题,在问题测试中非常清楚地描述了这一点。我改写了它以删除术语“开源实现”,但即使这样也不应该是必要的。这里没有什么“固执”。
标签: java reader stringreader