createInstance 与 createInstanceWithArguments

createInstance vs createInstanceWithArguments

我正在尝试 generate Typescript definitions from the LibreOffice IDL(通过 Doxygen 生成 XML)。

XMultiServiceFactory interface有两种创建实例的方法:createInstancecreateInstanceWithArguments。但是,我似乎找不到哪些类型需要参数以及它们是什么,应该用 createInstanceWithArguments; 实例化。哪些类型不需要参数,应该用 createInstance.

实例化

能够根据传递给方法的字符串参数定义重载将启用基于这些重载的静态类型:

// automatically typed as com.sun.star.frame.Desktop
let desktop = objServiceManager.createInstance('com.sun.star.frame.Desktop');

否则必须显式键入结果:

let desktop = objServiceManager.createInstance('com.sun.star.frame.Desktop')
    as com.sun.star.frame.Desktop;

我如何从文档中知道给定类型是否需要参数,以及这些参数是什么?

(LibreOffice 5.3.5 / Windows 10 64 位)

(最初发布于 ask.libreoffice,没有回复。)

根据 Service Manager dev guide:

The service definition should describe the meaning of each element.

我认为这意味着 IDL 文件应该说明是否需要任何参数。例如,在源代码文件/offapi/com/sun/star/configuration/ConfigurationProvider.idl中,有对参数的详细描述,注释中指出也可以创建不带任何参数的实例。 (但是代码没有显示参数;它只在注释中解释)。

看起来该文件的所有相关信息都已包含在 ConfigurationProvider 的联机文档中,因此无需实际查看 IDL 文件。

对比 com.sun.star.frame.Desktop, which does not take arguments, as shown in the example at https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Using_the_Desktop