Saxon Professional Edition在其工厂实施中使用了finalize方法,它填满了终结器。知道为什么使用终结器而不是接口级别的close()方法吗?
答案 0 :(得分:0)
Saxon只有一个地方包含了finalize()方法,即在所有版本中使用的Configuration对象上。配置支持所有各种API,例如,TransformerFactory,XPathFactory,SchemaFactory,XQJ DataSource或s9api处理器中将有一个Configuration。
finalize方法采取的操作是关闭用于“标准错误输出”的流,如果这不是System.err。在某些情况下,用户无法自行关闭它,例如,如果他们指定一个文件将此数据包含为配置属性。 JAXP API不提供任何类型的close()方法,我们可以使用它来触发关闭流,因此我们唯一可以做的就是垃圾回收。 (我们可以在工厂的实现上提供close()方法,但我认为很多用户都不会注意到它的存在。)
我会很感激这个问题的更多细节。你说它“填补了终结者”。这听起来像是在创建和发布许多Configuration对象。也许您正在创建大量的TransformerFactory对象?这将是非常糟糕的做法,因为创建一个TransformerFactory是昂贵的。通常,应用程序应创建单个工厂/配置并始终使用它;在单个应用程序中需要多个配置是非常罕见的。
(顺便说一句,你在这里提出一个问题,确实需要针对撒克逊开发人员,而不是用户社区。因此,通过萨克森在萨克斯他的支持网站上提出这个问题会更合适。 plan.io.我们试着关注这里提出的问题,但我们注意到这些问题的时间很长,我们并没有给予它们与正式支持请求相同的优先权。)