为了账号安全,请及时绑定邮箱和手机立即绑定

将对象添加到列表

将对象添加到列表

素胚勾勒不出你 2021-09-03 17:43:56
这可能是一个非常简单的解决方案,但我刚刚开始学习 Java。我想将每个实例化的产品添加到产品列表中。有没有办法在不修改访问修饰符的情况下解决这个问题?public class Product {    private int id;    private String name;    private float defaultPrice;    private Currency defaultCurrency;    private Supplier supplier;    private static List<Product> productList;    private ProductCategory productCategory;    public Product(float defaultPrice, Currency defaultCurrency, String name) {        this.id = IdGenerator.createID();        this.defaultPrice = defaultPrice;        this.defaultCurrency = defaultCurrency;        this.name = name;    }}
查看完整描述

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

}


查看完整回答
反对 回复 2021-09-03
?
炎炎设计

TA贡献1808条经验 获得超4个赞

更改初始化行

private static List<Product> productList;

private static List<Product> productList = new LinkedList<>();

添加productList.add(this)为构造函数的最后一行。

因此,每次调用 Product 构造函数时,它都会将此实例添加到静态列表中。


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信