在java中创建泛型数组
我正在尝试用java创建一个通用数组——在这个数组中我遇到了一些问题——如何创建一个元组数组,它的大小是6,里面有一个字节[]和一个整数 谢谢在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;
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)或固定长度很重要的数据结构(如哈希表)之外,很少有理由使用数组。