gpt4 book ai didi

java - 如何用类之间的相互依赖替换 Java 11 项目中已弃用的 finalize() 方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:43:35 26 4
gpt4 key购买 nike

我有一个涉及多个类的 Java 11 项目。在当前情况下,我的两个类 - A 和 B - 实现了 java finalize() 方法,该方法现在已被永久弃用。我知道该方法在不久的将来可能不会被删除,但我认为最好立即找到 finalize 的替代方法。

A 类中的finalize() 主要用于销毁作为 protected 成员变量的long 类型对象,以及打印某些消息以记录。 B 类中的 finalize() 只是打印某些消息以记录。

类 A 的实例是从其他几个类创建的,类 B 扩展了另一个类 ClassLoader。 (下面包含代码片段。)

我考虑了很多建议,例如,

这些一开始并没有得到很好的解释,即使解释得很好,这些示例也特定于具有同一类中的 main 方法的单类项目。我无法继续使用我在网上找到的最小解决方案。

根据我的研究,使用 try-with-resources 的 Autocloseable 似乎是我的最佳选择。我知道我的类 A 和 B 应该实现 Autocloseable 而被调用者(这里有点不确定)应该使用 try-with-resources。

即使是为了填补我对该场景的理解中可能存在的空白,我也将感谢任何帮助简化此问题的帮助。

A.java

class A
{
protected long a_var;
protected A(String stmt, boolean isd)
{
// a_var is initialized here
}

public void finalize()
{
if(a_var != 0)
{
log("CALL destroy !");
destroy(a_var);
log("DONE destroy !");
}
}
}

B.java

public class B extends extends ClassLoader
{
protected void finalize ()
{
log("No action");
}
}

最佳答案

因此,到目前为止,带有 try-with-resources 的 AutoCloseable 接口(interface)似乎是您的最佳选择。根据我的说法,这个 finalize 的替代方案是最简单的实现方式 - 但这当然可能因每个项目的复杂性而异。

A 类必须实现 AutoCloseable A 类实现 AutoCloseable 并且所有创建它的对象的地方都应该包含在 try 中try (A obj = new A())

现在更进一步,覆盖 AutoCloseable 提供的关闭方法,并从内部调用 destroy()。

class A implements AutoCloseable
{
@Override
public void close()
{
//log messages
destroy();
}
}

class X
{
// suppose creating object of A within some method
// enclose in try
try ( A obj = new A ())
{
//use obj
}
// at the end of scope, the close() method of A will be called.
}

关于java - 如何用类之间的相互依赖替换 Java 11 项目中已弃用的 finalize() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57990718/

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