说我有代码:
class Foobar {
Object item = null;
ItemInstantiator inst = new ItemInstantiator();
public instantiateItem() {
inst.instantiate(item);
}
}
class ItemInstantiator {
public instantiate(Object item) {
item = new Object();
}
}
由于Foobar类具有对实例化()中创建的新对象的实时引用,因此在实例化()完成后,该新对象不应该被垃圾收集,对吧?
我问,因为我正在开发一个项目,在这个项目中,最有意义的是在一个类中声明一个对象,并在另一个类的方法中实例化该对象。问题是,一旦实例化完成,对象仍为空。
答案 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