首页 > 解决方案 > 如果未调用用户定义类的 close() 函数,如何发出警告?

问题描述

我一直在寻找如何在 Java 中引发警告,如果来自具有close()函数的类中的特定对象在某些时候没有调用该close()函数(例如BufferedReader类)。

在搜索这个时,我发现了CloseableAutoCloseable接口以及它们是如何工作的,以及这个问题很有帮助:当类未关闭时强制警告

但是我仍然面临这样一个问题,当有问题的对象是通过函数创建时,它不应该被认为没有关闭。

例如,在这段代码中:

//X.java
import java.io.Closeable;
import java.io.IOException;

public class X implements Closeable{

    @Override
    public void close() throws IOException {
        System.out.println("CLOSE");
    }
}
//Main.java
public static void main(String[] args) throws IOException {
    X x = new X();
    System.out.println(x);
}

引发资源泄漏警告,但在这个(相同的 X.java)中:

//Main.java
public class Main {
    public static void main(String[] args) {
        X x = getX();
        System.out.println(x);
    }

    public static X getX(){
        return new X();
    }
}

在我想要的地方没有发出警告。

谢谢 !

标签: java

解决方案


推荐阅读