如何在已实现的接口类中重新安装对象数组?

时间:2018-02-14 04:45:37

标签: java inheritance static

我有一个接口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);  }

1 个答案:

答案 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);
    }
}