我想在我的数组中添加一个对象。我正在尝试创建一个方法,所以每当它被调用时,它都会添加泛型类型对象。这是我的代码:
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虽然显示了一个错误。它说“无法在数组类型E []”
上调用add(E)有谁知道为什么会这样?您是否知道将对象添加到我的通用数组的替代方法?
谢谢!
编辑:
当我创建一个实例化ArrayObjects的类的实例,并尝试向其添加值时,它不会这样做。代码:
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);
}
}
答案 0 :(得分:1)
数组不存在方法add()
。您必须使用正确的语法[]
:
public void addLast(E obj) {
array[currentSize++] = obj;
}
为了让您的列表打印得非常好,您需要在toString()
课程中添加ArrayObjects
方法:
public String toString() {
return Arrays.toString(array);
}
要迭代ArrayObjects
的元素,您可以实现Iterable
界面:
public class ArrayObjects<E> implements Iterable<E>
这要求您的班级使用iterator()
方法返回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)
你应该做这样的事情,假设当你添加你的第一个元素时你的实际大小是1
但是这个位置将是0
因为它是第一个位置数组。
public boolean addObj(E obj){
if(actualSize == maxCapacity){
return false;
}
array[actualSize--] = obj;
return true;
}
如果数组中没有剩余位置,我将返回值更改为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指出的那样,使用列表是没有意义的。但请记住,如果数组未满,则必须找到一个空位。