Java - 配置模式

时间:2017-12-20 08:59:19

标签: java dispose

我想确保我的对象(Class <? extends Object>)被妥善处理,因为其他实例可能包含他们使用的数据。例如,秘密数据的DEK / KEK对。

由于覆盖finalize()通常不受欢迎,如果对象引用设置为null,如何让IDE发出警告并强制开发人员调用dispose(),或者将自动设置为null(退出方法的示例)?

假设源代码由我直接控制,IDE是Netbeans。

1 个答案:

答案 0 :(得分:0)

首先,值得一提的是,在Java 9中不推荐使用终结器来支持Cleaner。可能这将是我将在下面描述的更好的选择。虽然没有尝试过。

说到问题本身:我会尝试这样做:

  1. 假设有一个类型A的对象,它实现了Closeable
  2. 使用唯一方法创建一个类S:void execute(Consumer<A> consumer)
  3. 在方法execute中:实例化A类型的对象,将其传递给使用者(accept),然后将其关闭。
  4. 在客户端代码中 - 始终使用S,将lambda作为使用者传递给它。在lambda中 - 你将得到A和S的实例将保证它的处置。
  5. 使所有构造函数对类A的可见性仅限于服务S(例如,将它们作为包私有并将A放在与S相同的包中)。这将阻止A在S之外被实例化并且不受管理。