我有能力在编译时扩展一个类,但我需要能够在运行时使用已经实例化的超类的实例创建该子类的实例.
这在理论上应该是可能的,因为超类构造函数已经在子类构造函数之前被调用.
我无法充分访问该程序以将实例化更改为我的子类,也无法中断原始实例化.
用例:存在类X的现有实例数组.我的代码在之后加载.我需要覆盖其中一个实例X的一个方法,我的加载子类Y扩展X.父程序只通过该数组访问对象,所以我想用我的Y实例替换该数组元素,但它需要表现得好像它最初被实例化到该数组中.我不能只包含超类实例和转发调用,并且重新实现超类也很困难.
我希望更清楚.
所以,我试图用Java对zip文件进行只读访问,以多线程方式解压缩,因为我使用枚举和输入流的ZipFile/ZipEntry的标准简单单线程解决方案和什么不导致它采取大约五个完整的秒钟,只需要将一个50兆的zipfile解压缩到内存中,这需要一秒钟的AT MOST让我的磁盘无需解压缩即可读取.
然而,整个Java zip库被同步到令人难以置信的令人讨厌的程度,毫无疑问,因为它完全被抽象用于读/写等.在相同的代码中,而不是具有良好的有效非同步只读代码.
我看过第三方Java库,它们都是大型的VFS库,比使用大象枪射击苍蝇更糟糕,或者它们具有性能优势的唯一原因是它们多线程到达无论如何,大多数线程都在磁盘IO上阻塞.
我想要做的就是将zipfile拉入byte [],分叉一些线程,然后处理它.没有理由以任何方式对任何事情进行任何同步,因为我在内存中单独使用的每个解压缩文件没有交互.
为什么一定要这么难?
我使用如下结构:
HashMap < EnumA , HashMap < Integer , LinkedList < EnumB > > > OverallMap
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
OverallMap . clear ( )
Run Code Online (Sandbox Code Playgroud)
这会否被丢弃的一切clear()(HashMap的对象,该Integer对象,而LinkedList的对象)最终会得到垃圾收集,或做我必须向下迭代一路名单,并调用clear()在他们之前,clear()荷兰国际集团的内部地图,然后clear()外部地图?