垃圾收集由自定义OpenOffice电子表格函数创建的Java对象的策略

垃圾收集由自定义OpenOffice电子表格函数创建的Java对象的策略,java,openoffice.org,openoffice-calc,libreoffice,Java,Openoffice.org,Openoffice Calc,Libreoffice,我已经编写了一个OpenOffice/LibreOffice外接程序,它在Java中实现了一些自定义的Calc电子表格函数。其中一些函数创建Java对象,然后这些对象在逻辑上与函数的结果关联,因此也与函数所使用的单元格关联 (目前假设函数是从单元格公式调用的,而不是从函数向导或其他上下文调用的) OpenOffice不会告诉自定义函数从哪个单元格调用它们,因此很难找出这种关联。如果函数的参数是单元格地址,那么可以查看这些单元格并找到依赖它们的单元格-这缩小了可能性 如果Java对象是字符串,则可

我已经编写了一个OpenOffice/LibreOffice外接程序,它在Java中实现了一些自定义的Calc电子表格函数。其中一些函数创建Java对象,然后这些对象在逻辑上与函数的结果关联,因此也与函数所使用的单元格关联

(目前假设函数是从单元格公式调用的,而不是从函数向导或其他上下文调用的)

OpenOffice不会告诉自定义函数从哪个单元格调用它们,因此很难找出这种关联。如果函数的参数是单元格地址,那么可以查看这些单元格并找到依赖它们的单元格-这缩小了可能性

如果Java对象是字符串,则可以在结果中包含该对象的唯一键,但这很难看。然后,我可以定期扫描所有单元格,以确保唯一密钥仍然存在于一个或多个单元格中

但是,该函数也可以嵌套在公式中的其他函数中,因此不能保证键最终在单元格的结果值中可见

我正在寻找一种干净的方法来检测对象的逻辑引用是否消失(因为函数的实例是用不同的参数调用的,或者包含函数的公式已被删除或更改)

编辑: 返回XvolatireResult看起来很有希望,但是在删除公式时(文档关闭时除外),永远不会调用removeResultListener()回调

还有一些澄清: 自定义函数作为Uno组件的实例方法实现(单个组件上可能有多个自定义函数)。只创建了组件的一个实例

使用字符串或数字参数调用函数方法,这些参数与电子表格公式中的参数相对应。也可以将参数作为单元格引用而不是值接收

函数的结果是字符串、数值或XvolatireResult。不可能返回任意Java对象


我创建Java对象作为计算函数的副作用,我希望能够在其他单元格的其他公式中引用这些对象。

我看不出问题出在哪里。如果单元格/公式引用了您的结果对象,并且单元格/公式被删除并因此被垃圾收集,那么结果也将被删除。你有没有在地图上记录下你计算的所有结果?你为什么认为他们不会获得GCD?您能给我们看一些代码吗?单元格/公式不是由可以跟踪的Java对象表示的。