3 回答
TA贡献1785条经验 获得超4个赞
就像Peter Lawrey在Mureinik's answer的评论部分提到的那样,static在 POJO 中拥有一个集合并不是最好的解决方案。
我建议使用简单的外观。这将列表存在限制为外观生命并且不包括 POJO 中集合的逻辑。
public class FacadeProduct {
private List<Product> cacheProduct = new ArrayList<>();
public Product createProduct(float defaultPrice, Currency defaultCurrency, String name){
Product p = new Product(defaultPrice, defaultCurrency, name);
cacheProduct.add(p);
return p;
}
}
这将非常简单易用。
public static void main(String ars[]){
{
FacadeProduct f = new FacadeProduct();
{
Product p1 = f.createProduct(1f, null, "test1");
Product p2 = f.createProduct(1f, null, "test2");
Product p3 = f.createProduct(1f, null, "test3");
// Here, the list have 3 instances in it
}
// We lose the p1, p2, p3 reference, but the list is still holding them with f.
}
//Here, we lose the f reference, the instances are all susceptible to be collected by the GC. Cleaning the memory
}
TA贡献1808条经验 获得超4个赞
更改初始化行
private static List<Product> productList;
到
private static List<Product> productList = new LinkedList<>();
添加productList.add(this)
为构造函数的最后一行。
因此,每次调用 Product 构造函数时,它都会将此实例添加到静态列表中。
添加回答
举报