2014-10-08 31 views
3
public class PriorityQueue<E> { 


private E[] array; 
private int size; 
private int front; 
private int back; 
private int numOfElements = 0; 
private static int EMPTY = 0; 



public <E> int insert(E input) 
{ 
    if (numOfElements + 1 <= size) 
    { 
     array[back] = input; 
     back++; 
     numOfElements++; 

    } 


    return 0; 
} 

出于某种原因,我收到一个编译错误,说我不能将我的输入文件(E类型)转换为E类型。为什么?是不是因为它在技术上不是E型?Java泛型错误:无法从E转换为E?

+4

insert()方法的''参数是不必要的,它隐藏了同名的类级参数。 – biziclop 2014-10-08 12:44:04

回答

9

Yout声明了两个类型参数E。没有必要这样做。类声明PriorityQueue<E>中的类型参数就足够了。

变化

public <E> int insert(E input) 

public int insert(E input) 
3

从您的插入方法删除泛型参数,它会编译。您不需要在方法级别是通用的,因为您已在类的泛型参数中拥有您的队列类型。

public class PriorityQueue<E> { 


    private E[] array; 
    private int size; 
    private int front; 
    private int back; 
    private int numOfElements = 0; 
    private static int EMPTY = 0; 


    public int insert(E input) { 
     if (numOfElements + 1 <= size) { 
      array[back] = input; 
      back++; 
      numOfElements++; 

     } 
     return 0; 
    } 
} 
相关问题