从参数给出的对象的Java生命周期

时间:2016-03-10 07:31:02

标签: java object scope lifetime

说我有代码:

    class Foobar {
        Object item = null;
        ItemInstantiator inst = new ItemInstantiator();
        public instantiateItem() {
            inst.instantiate(item);
        }
    }

    class ItemInstantiator {
        public instantiate(Object item) {
            item = new Object();
        }
    }

由于Foobar类具有对实例化()中创建的新对象的实时引用,因此在实例化()完成后,该新对象不应该被垃圾收集,对吧?

我问,因为我正在开发一个项目,在这个项目中,最有意义的是在一个类中声明一个对象,并在另一个类的方法中实例化该对象。问题是,一旦实例化完成,对象仍为空。

1 个答案:

答案 0 :(得分:2)

您正在实例化方法中的对象, NOT 返回其引用

你应该改为

class Foobar {
        Object item = null;
        ItemInstantiator inst = new ItemInstantiator();
        public instantiateItem() {
           item = inst.instantiate(item);
        }
    }

    class ItemInstantiator {
        public Object  instantiate(Object item) {
            item = new Object();
            return item;
        }
    }

清洁代码 - 敏捷软件工艺手册指出,应该避免在一般输出参数中使用。如果你的函数必须改变某个东西的状态,那么让它改变它拥有对象的状态。

请重新考虑类设计,通过传递引用来实例化对象是否真的有意义。根据您的代码,它没有任何意义。您可以在不传递任何参数item

的情况下创建对象