无法在java中使用构造函数
我已经开始学习java泛型,这是我的优先队列实现:无法在java中使用构造函数,java,generics,Java,Generics,我已经开始学习java泛型,这是我的优先队列实现: public class MinPQ<Key> implements Iterable<Key> { private Key[] pq; // store items at indices 1 to n private int n; // number of items on priority queue private
public class MinPQ<Key> implements Iterable<Key> {
private Key[] pq; // store items at indices 1 to n
private int n; // number of items on priority queue
private Comparator<Key> comparator; // optional comparator
public MinPQ(Key[] keys) {
n = keys.length;
pq = (Key[]) new Object[keys.length + 1];
.....
.....
}
}
public类MinPQ实现了Iterable{
私钥[]pq;//在索引1到n处存储项
private int n;//优先级队列上的项目数
专用比较器比较器;//可选比较器
公共MinPQ(键[]键){
n=键。长度;
pq=(键[])新对象[keys.length+1];
.....
.....
}
}
这是我的主要课程:
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] ar = {1,2,3};
MinPQ<Integer> pq = new MinPQ<Integer>(ar);
}
}
公共类演示{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
int[]ar={1,2,3};
MinPQ pq=新的MinPQ(ar);
}
}
但是在这里我得到一个错误,声明“构造函数MinPQ(int[])未定义”有人能帮我找到这里的问题吗?您不能将基元类型与泛型一起使用。只要改变一下:
int[] ar = {1,2,3};
致:
或者用盒子把它装起来
IntStream.of(ar).boxed().toArray(Integer[]::new)
基本上,由于
MinPQ
声明,您试图将int[]
传递给需要Integer[]
的构造函数。因此,在tehory中,如果您将其声明为MinPQ
,它应该可以工作-但正如一开始所述,我们不能将基元类型用于泛型。这是否回答了您的问题?不要创建泛型类型的数组,因为类型擦除有问题。相反,使用列表
或其他通用集合。正如@DontKnowMuchButGettingBetter所说,使用列表
可能会更轻松。但是,作为练习,尝试将ar
更改为Integer[]
,而不是int[]
。只想添加一点,您可以使用IntStream.of(intArray.boxed().toArray(Integer[]::new)
将预先存在的int[]
转换为Integer[]
@pafauk。它似乎可以工作,你是一个救命恩人…酷,我会把它添加到答案中-数组可能不在你的控制之下。在初始化中指定参数类型后,它工作了。。。
IntStream.of(ar).boxed().toArray(Integer[]::new)