是否有任何方法可以实现一个StringReader
类,该类允许使用StringReader
多个字符串重用相同(或类似功能)对象,而无需更改其任何功能(方法)?
例如,这样的 Java 类(例如ReusableStringReader
)将是 的子类java.io.StringReader
,并带有一个额外的方法,例如
public void reset(String str);
这会将新的字符串值分配给内部StringReader
参数,以便所有后续调用该read()
方法的方法都StringReader
使用新值。Reader
当想要限制应用程序使用的对象数量(例如,每秒通过对象处理大量字符串的应用程序)时,这种“可重用性”非常方便。
实现这一目标的一般方法是:
- 遗产。StringReader 的所有内部状态都存储在私有实例变量中,因此这不是一个选项。
- 反射。
StringReader
通过反射重置对象的内部状态。有 4 个实例变量需要设置,这意味着每个“reset(String)”调用有 4 个反射调用(效率不是很高)。 - 作品。可以使用一个可重用的对象,
StringInputStream
并从中通过 创建一个Reader
对象InputStreamReader
,然后Reader
在 的子类内部使用该对象StringReader
,以实现StringReader
该类的完整 API。不过,这确实是一个 hack。
有更好的解决方案的想法吗?