Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在java中使用构造函数_Java_Generics - Fatal编程技术网

无法在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

我已经开始学习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 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)