我正在使用 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/