如何使用方法将对象添加到通用数组 Java

How to add an Object to a Generic array using a method Java

我想向我的数组中添加一个对象。我正在尝试创建一个方法,因此无论何时调用它,它都会添加泛型类型对象。这是我的代码:

public class ArrayObjects<E> implements SomeImp<E>{

    private E[] list;

    private int maxCapacity, currentSize;

    public ArrayObjects(){
        maxCapacity = 10;
        array = (E[]) new Object[maxCapacity];
    }

    public void addObj(E obj){
        array.add(obj); //Throws an error
    }
}

Eclipse 向我显示错误。它说 "Cannot invoke add(E) on the array type E[ ]"

有谁知道为什么会这样?您知道将对象添加到我的通用数组的替代方法吗?

谢谢!


编辑:

当我创建实例化 ArrayObjects 的 class 实例并尝试向其添加值时,它并没有这样做。代码:

import packageWhereArrayObjectsIs.*;


public class Test {
    private ArrayObjects<Integer> list;

    public Test() {
        list = new ArrayObjects<Integer>();    
        Test();
        }

    private void TestOne() { 
        for(int i=1; i <= 10; i++)
            list.addLast(i);         
        System.out.println("Should print 1 .. 10");
        System.out.println(list);

    }
}

数组不存在方法add()。您必须使用正确的语法 []:

访问数组元素
    public void addLast(E obj) {
        array[currentSize++] = obj;
    }

为了让您的列表打印得很好,您需要将 toString() 方法添加到 ArrayObjects class:

    public String toString() {
        return Arrays.toString(array);
    }

要遍历 ArrayObjects 的元素,您可以实现 Iterable 接口:

public class ArrayObjects<E> implements Iterable<E>

这需要您的 class 有一个 iterator() 方法,returns 一个 Iterator:

    public Iterator<E> iterator() {
        class It implements Iterator<E>
        {
            int position = -1;
            public boolean hasNext() {
                return position + 1 < currentSize;
            }
            public E next() {
                return array[++position];
            }
            public void remove() {
                throw new UnsupportedOperationException();
            }
        }
        return new It();
    }

最后,这段代码展示了如何使用增强的 for 循环遍历列表:

        ArrayObjects<Integer> list = new ArrayObjects<Integer>();
        for (int i = 0; i < 10; i++) list.addLast(i);
        for (Integer i: list) {
            System.out.println("Iterating over list! Next element is " + i);
        }

你应该做这样的事情,假设当你添加第一个元素时你的实际大小是 1 但是 位置将是 0 因为它是数组的第一个位置。

public boolean addObj(E obj){

    if(actualSize == maxCapacity){
        return false;
    }

    array[actualSize--] = obj;

    return true;
}

如果数组中没有剩余位置(考虑到您不会删除中间的任何对象),我将 return 值更改为 return false。

为什么需要数组?为什么不使用 List

public class ArrayObjects<E> implements SomeImp<E>{

private List<E> list;

private int maxCapacity;

public ArrayObjects(){
    maxCapacity = 10;
    list = new ArrayList<E>();
}

public boolean addObj(E obj){

    if(list.size() == maxCapacity){
        return false;
    }

    list.add(obj);

    return true;
}
}

看到使用列表,您将不必处理 actualSize

编辑:正如 Smac89 指出的那样,使用列表是没有意义的。但请记住,如果数组未满,您将不得不找到一个空位置。