在java中我想创建每个对象,添加到对象样本列表中。 有没有办法在构造函数本身中执行它,如:
public ObjectSample() {
mObjectSamples.add(this);
}
或者我必须在创建后调用add方法。
答案 0 :(得分:1)
您无法更改Object
类的构造函数。
您可以在其中一个类中使用构造函数将新创建的实例添加到静态Collection中。
public YourClass
{
public static List<YourClass> list = new ArrayList<>();
public YourClass()
{
list.add(this);
}
}
答案 1 :(得分:1)
将您对象的新实例添加到列表中。
public class Foo{
public static List<Foo> list = new List<Foo>();
public Foo(){
//Do whatever
}
public stativ void main(String args[]){
list.add(new Foo());
}
}
这会将对象作为参数传递给add()
方法,从而将对象添加到列表中。
答案 2 :(得分:0)
首先创建对象,然后将此对象添加到List
,
class MyClass{
private static List<Object> mObjectSamples = new ArrayList<Object>();
private int a,b;
MyClass(int a, int b){ // initialize your object using parametrized constructor
this.a = a; // suppose you have to initialize you a and b member of class.
this.b= b;
mObjectSamples.add(this);
}
}
答案 3 :(得分:0)
首先,您无法修改库类的构造函数,尤其不能修改Object
的构造函数。但是,我绝对不建议将每个新对象放在列表中,因为有大量的对象你甚至不需要关心,我无法想到任何你希望将所有这些都放在列表中的情况。
如果您想要特定类型的每个对象,例如在您的列表中Element
,您可以像这样定义Element
类:
public class Element
{
public Element()
{
elements.add(this);
...
}
...
}
答案 4 :(得分:0)
考虑一个静态工厂方法,这是 Joshua Block 的Effective Java 推荐的,也在 this Baeldung post 中描述。如果您将构造函数设为私有,则您的类只能由静态工厂方法实例化。将构造函数限制为执行对象的类指定字段的实例化,并让更通用的代码处理类之外的任何内容,这通常是一个好主意。静态工厂方法是放置此类外部实例化的好地方。
对于名义上的 Element 类,它可能如下所示:
public class Element {
private final List<Element> trackedElements = new ArrayList<>();
public static Element newTrackedElement(...) {
var e = new Element(...);
trackedElements.add(e);
...other out-of-class instantiation...
return e;
}
private Element(...) {
...in-class instantiation...
}
...
}
使用这种方法,集合只包含完全实例化的对象,并且这些对象在工厂方法调用完成时保证在集合中。它比拥有一个完全实现的工厂类更简单,如果在创建新对象时涉及足够的额外工作,这可能会很有用。