java - 为什么在构造函数中添加到静态 ArrayList 会导致泄漏?

标签 java constructor arraylist

我正在使用 NetBeans IDE,它给我一个对我来说没有意义的警告。警告指出“在构造函数中泄漏”。以下代码是基本设置(我只是删除了与问题无关的代码)。基本上我只想保留所有 Square 对象的列表。这是我需要担心的警告吗?还是只是根据情况可能导致内存泄漏的原因?

无论哪种方式,有人可以解释为什么这会被视为泄漏吗?

public class Square {
    private static ArrayList<Square> squares;

    public Square() {
        if(squares == null) {
            squares = new ArrayList<>();
        }

        squares.add(this); // I get a warning on this line
    }
}

我知道这只是一个警告,但我不想忽略警告,除非我完全了解正在发生的事情并且可以针对特定情况做出明智的选择。

谢谢!

最佳答案

(不是真正的答案,但是......)

如果您的目标确实是在列表中维护您创建的所有方 block 的列表,那么有更好的方法可以实现:

public class Square
{
    private static final List<Square> allSquares = new ArrayList<Square>();

    // Constructor: private!
    private Square() {}

    // Create a square
    public static Square newSquare()
    {
        Square ret = new Square();
        allSquares.add(ret);
        return ret;
    }
}

您会注意到构造函数中没有this 转义。

要创建一个新的正方形,您需要执行以下操作:

Square mySquare = Square.newSquare();

关于java - 为什么在构造函数中添加到静态 ArrayList 会导致泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14229084/

相关文章:

java - 在android中使用soap webservices的mysql数据库连接

c++ - 在哪些情况下根本没有构造函数,甚至没有默认构造函数?

java - 访问 arraylist 数组中的元素

java - 如何限制Single.Zip并行度?

java - 无参数的通用方法调用

c++ - 为什么我们不能从构造函数返回任何东西?

java - 当n个人围成一圈时寻找幸存者

java - 如何将多个文本字段添加到数组列表 JavaFX

java - 如何混合 PCM 音频源(Java)?

TypeScript – TypeError : Alice_1. Alice 不是构造函数