所以我正在尝试创建一个简单的程序,允许我将一个Int,String,double ....数组放到一个对象上并打印出来:
public class Array<E> {
private E[] data;
private int size;
public Array(int size, E[] data)
{
this.size=size;
for(int i=0; i<size; i++) this.data[i]=data[i];
}
public String toString()
{
String s=new String();
for(int i=0; i<size; i++) s+=data[i]+" ";
return s;
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int A[]= {1, 3, 5, 7};
Array<Integer> niza=new Array<Integer>(4, A);
System.out.println(niza.toString());
}
}
但是每当我尝试创建对象时,它都会给我这个错误:
线程“main”中的异常java.lang.Error:未解决的编译问题: 构造函数Array(int,int [])未定义
at test.Main.main(Main.java:8)
关于导致问题的原因和可能的解决方案的任何想法?
提前致谢!
答案 0 :(得分:6)
问题在于
int A[]= {1, 3, 5, 7};
Array<Integer> niza=new Array<Integer>(4, A);
声明一个ints
数组,而构造函数则需要Integer[]
。 int
是基本类型,与Integer
的类型不同。在可能和需要时,编译器会在int
和Integer
之间进行转换,but this conversion is not defined for arrays.
如果您将数组声明为
Integer A[]= {1, 3, 5, 7};
Array<Integer> niza=new Array<Integer>(4, A);
your code will compile, but fail with a NullPointerException
因为成员data
未初始化。 You can easily fix that with
private final E[] data;
public Array(int size, E[] data)
{
this.size=size;
this.data = Arrays.copyOf(data, size);
}
虽然我更愿意使用ArrayList
而不是数组......