我有一个接口I,它有一个静态函数returnbjectsCreated()
最初A级和B级实施I
但我想跟踪创建的对象。
所以我创建了一个实现I的C类; A和B延伸C. 我想在C的构造函数中将数组附加到defObj []中但是它没有工作,因为它是最终的。
public interface I
{
DefObj[] defObj;
public static DefObj[] returnCreatedObjArr()
{
return defObj;
}
}
每次我为A或B创建一个新对象时,都需要将其附加到界面中的defObj。
即当我访问I.returnCreatedObjArr()时,它应该返回所有创建的对象。
我该怎么办?
注意:不能使用外部包或Java集合
你能加一点吗?我现在遇到的麻烦如下:
private Node[] updateDefObj()
{
DefObj[] new DefObj = new DefObj[defObj.length + 1];
System.arraycopy(defObj.length, 0, new defObj.length, 0, defObj.length);
defObj.[defObj.length+1] = this;
return defObj.length;
}
class constructor:
C() {
defObj = new DefObj.length[defObj.length + 1] ;
defObj = updateDefObj(defObj); }
答案 0 :(得分:0)
您可以创建一个Array的包装类(对于我的示例MyInterfaceObjectArray),它将在运行时增加其大小。您可以根据需要实现增量逻辑,在我的情况下,我有两倍当前大小的数组也从大小10开始。您可以尝试如下:
public class Main {
public static void main(String[] args) throws ParseException {
MyInterfaceImpl impl;
for (int i = 0; i < 25; i++) {
new MyInterfaceImpl();
}
System.out.println("Object Array : " + Arrays.toString(MyInterface.getObjects()));
}
}
class MyInterfaceObjectArray {
MyInterface[] objects;
private int offset = 0;
MyInterfaceObjectArray() {
objects = new MyInterface[10];
}
public void addObjectToArray(MyInterface i) {
if (offset == objects.length) {
MyInterface[] copyObjects = new MyInterface[offset * 2];
System.arraycopy(objects, 0, copyObjects, 0, offset - 1);
objects = copyObjects;
}
objects[offset] = i;
offset++;
}
public MyInterface[] getObjects() {
return objects;
}
}
interface MyInterface {
MyInterfaceObjectArray interfaceObjectArray = new MyInterfaceObjectArray();
static MyInterface[] getObjects() {
return interfaceObjectArray.getObjects();
}
}
class MyInterfaceImpl implements MyInterface {
MyInterfaceImpl() {
interfaceObjectArray.addObjectToArray(this);
}
}