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

如何使用Java方法将对象添加到通用数组,java,arrays,oop,generics,Java,Arrays,Oop,Generics,我想向数组中添加一个对象。我正在尝试创建一个方法,因此每当调用它时,它都会添加泛型类型对象。这是我的密码: public class ArrayObjects<E> implements SomeImp<E>{ private E[] list; private int maxCapacity, currentSize; public ArrayObjects(){ maxCapacity = 10; arra

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

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
    }
}
公共类ArrayObject实现了一些IMP{
私人E[]名单;
私有int最大容量,currentSize;
公共阵列对象(){
最大容量=10;
数组=(E[])新对象[maxCapacity];
}
公共无效添加对象(E对象){
array.add(obj);//引发错误
}
}
但Eclipse向我显示了一个错误。它说“不能在数组类型E[]上调用add(E)”

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

谢谢大家!


编辑:

当我创建一个实例化ArrayObject的类的实例并尝试向其添加值时,它不会这样做。代码:

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);

    }
}
import packagewhererrayobjectsis.*;
公开课考试{
私有阵列对象列表;
公开考试(){
列表=新的ArrayObject();
Test();
}
私有void TestOne(){
对于(int i=1;i数组不存在方法
add()
。必须使用正确的语法
[]
访问数组元素:

    public void addLast(E obj) {
        array[currentSize++] = obj;
    }
为了使列表能够很好地打印,您需要将
toString()
方法添加到
ArrayObject
类中:

    public String toString() {
        return Arrays.toString(array);
    }
要迭代
阵列对象的元素
,可以实现
Iterable
接口:

public class ArrayObjects<E> implements Iterable<E>
最后,这段代码展示了现在如何使用增强的
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);
        }
ArrayObject列表=新的ArrayObject();
对于(inti=0;i<10;i++)list.addLast(i);
for(整数i:列表){
System.out.println(“迭代列表!下一个元素是“+i”);
}

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

public boolean addObj(E obj){

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

    array[actualSize--] = obj;

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

为什么需要数组?为什么不使用
列表

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;
}
}
公共类ArrayObject实现了一些IMP{
私人名单;
专用int最大容量;
公共阵列对象(){
最大容量=10;
列表=新的ArrayList();
}
公共布尔addObj(E obj){
if(list.size()==maxCapacity){
返回false;
}
列表。添加(obj);
返回true;
}
}
请注意,使用一个列表,您不必处理
actualSize


编辑:正如Smac89所指出的,使用列表是没有意义的。但请记住,如果数组未满,则必须找到一个空位置。

数组是不可变的,因此不能更改-也就是说,没有add()方法。ArrayList有add(),但普通数组不能。您不能对该类型的数组调用
add
。您需要使用索引。您还可以研究使用ArrayList代替它。您可以阅读我的更新吗?谢谢!您需要发布ArrayObjects实现。它起作用了!它消除了错误,但现在我尝试在我的编辑中使用我的类(请参阅上面的编辑),唯一打印的东西是“包装”,而“包装”是一个物体。ArrayObjects@3343c8b3"@CesarA这意味着您需要重写类的toString方法。因为您没有这样做,所以会调用一个从Object类派生的泛型toString方法,这将为您提供字符串表示形式的要点like@CesarA我添加了一个
toString()
我的答案的示例;这将帮助您很好地打印您的类:)感谢您的回复。如果我想使用迭代器,我将如何实现它来迭代数组?非常感谢您的帮助!@CesarA我更新了我的答案,向您展示了如何迭代数组。不过,不要指望我再帮助您,因为您选择了其他人的答案。在cl中使用列表似乎是多余的作为列表的ass。为什么不直接使用列表而不进行不必要的封装。还要注意,第一个列表可能最终不会插入任何元素或导致索引exception@Smac89如果不封装,它如何限制列表中的条目数?如果需要限制,列表仍然不是解决方案Well是一个更好的选择。因此,您的初始解决方案将在那里工作。请参阅我上面的编辑。修改了我的代码。它仍然抱怨“无法在数组类型E[]上调用add(E)”@CesarA add()是一个列表方法,当您使用数组时,您必须明确指定要使用的位置。请尝试我的第一个解决方案。
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;
}
}