gpt4 book ai didi

java - 当 Constructor#newInstance 抛出异常时获取实例?

转载 作者:行者123 更新时间:2023-12-02 08:23:15 31 4
gpt4 key购买 nike

我正在开发一个简单的插件系统,其中第三方插件实现 Plugin 接口(interface)。扫描 JAR 目录,并使用 Constructor#newInstance 实例化实现类。

问题是,这些插件会回调插件主机的 register* 方法。这些注册使用 Plugin 实例作为句柄。我的问题是,如果构造函数决定失败并中途抛出,如何清理这些注册。

InitationTargetException 似乎没有任何内容来获取实例。 有没有办法获取抛出异常的构造函数的实例?

P.S.:通常强烈建议用户构造函数不要执行任何操作,但实际上人们会以任何方式执行此操作。

最佳答案

您实际上要问的是,当构造函数抛出异常时,是否有办法获取(部分)实例。

答案是否定的。但这并不是因为实例“死亡”。事实上,对实例的引用仍然可以被应用程序的其他部分访问和使用......如果它在构造函数完成之前已“发布”。

真正的原因是创建或抛出异常都没有记录与执行创建/抛出异常的方法或构造函数关联的实例。

<小时/>

您需要通过其他方式解决这个问题。我的建议是你制定一个规则,这些插件类必须只将实例注册为构造函数的最后一条语句;即,当不再抛出与初始化相关的异常时。

关于java - 当 Constructor#newInstance 抛出异常时获取实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057622/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com