假设我有代码:
class Foobar {
Object item = null;
ItemInstantiator inst = new ItemInstantiator();
public instantiateItem() {
inst.instantiate(item);
}
}
class ItemInstantiator {
public instantiate(Object item) {
item = new Object();
}
}
由于 Foobar 类具有对 instantiate() 中创建的新对象的实时引用,因此在 instantiate() 完成后该新对象不应该被垃圾回收,对吗?
我问这个问题是因为我正在开发一个项目,在一个类中声明一个对象并在另一个类的方法中实例化该对象是最有意义的。问题是,一旦实例化完成,该对象仍然为空。
最佳答案
您正在方法中实例化对象,并且不返回其引用
您应该更改为
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;
}
}
《Clean Code - A Handbook of Agile Software Craftmanship》一书指出,一般情况下应该避免输出参数。如果您的函数必须更改某些对象的状态,请让它更改其所属对象的状态。
请重新思考类的设计,通过传递引用来实例化对象是否真的有意义。根据您的代码,它没有任何意义。您可以只创建对象而不传递任何参数 item
关于从参数给定引用的对象的 Java 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35910222/