如何使用方法将对象添加到通用数组 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 指出的那样,使用列表是没有意义的。但请记住,如果数组未满,您将不得不找到一个空位置。
我想向我的数组中添加一个对象。我正在尝试创建一个方法,因此无论何时调用它,它都会添加泛型类型对象。这是我的代码:
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 指出的那样,使用列表是没有意义的。但请记住,如果数组未满,您将不得不找到一个空位置。