使用泛型创建Array对象

时间:2017-10-23 08:10:02

标签: java arrays generics

所以我正在尝试创建一个简单的程序,允许我将一个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)

关于导致问题的原因和可能的解决方案的任何想法?

提前致谢!

1 个答案:

答案 0 :(得分:6)

问题在于

    int A[]= {1, 3, 5, 7};
    Array<Integer> niza=new Array<Integer>(4, A);

声明一个ints数组,而构造函数则需要Integer[]int是基本类型,与Integer的类型不同。在可能和需要时,编译器会在intInteger之间进行转换,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而不是数组......