使用泛型创建Array对象

Dav*_*ers 2 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());
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试创建对象时,它都会给我这个错误:

线程"main"中的异常java.lang.Error:未解决的编译问题:构造函数Array(int,int [])未定义

at test.Main.main(Main.java:8)
Run Code Online (Sandbox Code Playgroud)

什么导致问题和可能的解决方案?

提前致谢!

Jen*_*ens 6

问题是

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

声明一个数组ints,而构造函数期望Integer[].int是一种基本类型,是一种不同的类型Integer.编译器之间进行转换int,并Integer在可能的情况和需要,但这种转换还没有为数组定义.

如果将数组声明为

    Integer A[]= {1, 3, 5, 7};
    Array<Integer> niza=new Array<Integer>(4, A);
Run Code Online (Sandbox Code Playgroud)

您的代码将编译,但NullPointerException因为该成员data未初始化而失败.您可以轻松解决这个问题

private final E[] data;

public Array(int size, E[] data)
{
    this.size=size;
    this.data = Arrays.copyOf(data, size);
}
Run Code Online (Sandbox Code Playgroud)

虽然我更愿意使用ArrayList而不是数组......