在java中创建泛型数组

在java中创建泛型数组,java,arrays,generics,Java,Arrays,Generics,我正在尝试用java创建一个通用数组——在这个数组中我遇到了一些问题——如何创建一个元组数组,它的大小是6,里面有一个字节[]和一个整数 谢谢 private Tuple<byte[], Integer>[] alternativeImages1 = new Tuple<byte[], Integer>[6]; class Tuple<F, S> { public final F first; public final S second;

我正在尝试用java创建一个通用数组——在这个数组中我遇到了一些问题——如何创建一个元组数组,它的大小是6,里面有一个字节[]和一个整数

谢谢

private Tuple<byte[], Integer>[] alternativeImages1 = new Tuple<byte[], Integer>[6];

class Tuple<F, S> {

    public final F first;
    public final S second;

    public Tuple(final F first, final S second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public boolean equals(final Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;

        final Tuple tuple = (Tuple) o;
        return this.first == tuple.first && this.second == tuple.second;
    }

    @Override
    public int hashCode() {
        int result = this.first != null ? first.hashCode() : 0;
        result = 31 * result + (this.second != null ? second.hashCode() : 0);
        return result;
    }
}
private Tuple[]alternativeImages1=新的Tuple[6];
类元组{
公开决赛F-first;
公开决赛第二名;
公共元组(最后的F第一,最后的S第二){
this.first=first;
这个秒=秒;
}
@凌驾
公共布尔等于(最终对象o){
if(this==o)
返回true;
如果(o==null | | getClass()!=o.getClass())
返回false;
最终元组Tuple=(Tuple)o;
返回this.first==tuple.first&&this.second==tuple.second;
}
@凌驾
公共int hashCode(){
int result=this.first!=null?first.hashCode():0;
result=31*result+(this.second!=null?second.hashCode():0);
返回结果;
}
}

您可以使用原始类型:

Tuple[] array = new Tuple[6];
或者,您可以进行未经检查的转换:

Tuple<byte[], Integer>[] array = (Tuple<byte[], Integer>[])new Tuple[6];

// or just this because raw types let you do it
Tuple<byte[], Integer>[] array = new Tuple[6];
Tuple[]数组=(Tuple[])新的Tuple[6];
//或者仅仅是因为原始类型允许您这样做
元组[]数组=新元组[6];
或者您可以使用列表来代替:

List<Tuple<byte[], Integer>> list = new ArrayList<Tuple<byte[], Integer>>();
List List=new ArrayList();
我建议改为使用列表


在前两个选项中进行选择,我建议使用未经检查的转换,因为它将为您提供编译时检查。但是,如果您将其他类型的元组放入ArrayStoreException中,它将不会引发ArrayStoreException。

您无法创建采用类型参数的类型数组;这是Java中数组的一个限制。以前有人问过这个问题,例如:如果你可以使用一个固定大小的列表,而不需要进行边界检查,那么我会使用一个列表,我认为(特别是如果我可以删除默认的空值),它的真实列表与数组有一些不同的功能。不过,可以扩展ArrayList并使其行为更像一个数组。如果您愿意,我可以给您举一个例子,不过我建议您习惯使用列表的功能。它通常是优越的,除了低级处理(如I/O)或固定长度很重要的数据结构(如哈希表)之外,很少有理由使用数组。