假设我有一个带有静态列表的类X.然后,假设另一个类Y实例化类Z.
Z的构造函数是否可以将Z放在X列表的末尾。另一种方法是在Y中实例化Z,然后让Y手动将Z放在X的列表中。哪种方式更好?
以下是一些代码:
public class X {
public static List list = new List() ;
}
public class Y {
makeZ() {
Z xObject = new Z() ;
}
}
public class Z {
Z() {
// put Z into X's list
}
}
替代Y类是有效的。 。 。
public class Y {
makeZ() {
Z xObject = new Z() ;
X.list.put(Z) ;
}
}
当然,在这种情况下,Z的构造函数不会将自己置于X的列表中,因为Y的makeZ()方法就是这样做的。
答案 0 :(得分:0)
在构造函数中,您可以访问this
,它代表正在初始化的对象,因此您可以将其用作任何其他对象。
答案 1 :(得分:0)
Z的构造函数是否可以将Z放在X列表的末尾
是的,如果Z可以访问X的列表。
哪种方式更好?
这取决于语义。列表是否与Z的职责密切相关或更多与Y的关系?
答案 2 :(得分:0)
您需要做的就是确保可以在全局范围内访问x变量,或者有一个方法来实现这一点,而实例化Z只需使用此方法来添加它。
答案 3 :(得分:0)
这是一个完整的(差不多)程序,可以回答你问题的第一部分:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestClass {
public static void main(String[] args) {
Y y = new Y();
y.makeZ();
Iterator<Object> it = X.list.iterator();
while (it.hasNext())
System.out.println(it.next());
}
}
class X {
public static List<Object> list = new ArrayList<Object>();
}
class Y {
void makeZ() {
Z xObject1 = new Z(10) ;
Z xObject2 = new Z(11) ;
}
}
class Z {
int a;
Z(int j) {
// put Z into X's list
a = j;
X.list.add(this);
}
public String toString() {
return a + "";
}
}
以及问题的第二部分: 我总是致力于在构造函数中初始化对象。 如果从z类中添加一个对象是初始化的一部分,我认为这是一个不错的选择,否则就在其他地方进行。(始终保持代码整洁)