代码之家  ›  专栏  ›  技术社区  ›  boppa

在泛型[duplicate]中找不到符号/无法使用ArrayList将对象转换为可比对象

  •  0
  • boppa  · 技术社区  · 7 年前

    在这个程序中,我使用Java中的ArrayList创建了一个堆优先级队列。 我会尽量保留代码,以帮助更容易地解决问题。

    本质上,我已经为heapAPI定义了一个接口,并在Heap类中实现了它。堆构造函数应该通过定义对象的arraylist来构造堆对象。这里,我想传递PCB类的对象(要进入优先级队列的作业)。但是,当我传递这些对象时,我无法通过arraylist访问它们。

    希帕皮。Java语言

    public interface HeapAPI<E extends Comparable<E>>
    {
         boolean isEmpty();
         void insert(E item);
         E remove() throws HeapException;
         E peek() throws HeapException;
         int size();
    }
    

    public class Heap<E extends Comparable<E>> implements HeapAPI<E>
    {
         private ArrayList<E> tree;
    
         public Heap()
         {
              tree = new ArrayList<>();
         }
    
    // don't believe the rest of the class is necessary to show
    }
    

    印刷电路板。Java语言

    public class PCB implements Comparable<PCB>
    {
         private int priority;
    
         // various private variables
    
         public PCB()
         {
           priority = 19;
           // instantiated variables
         }
    
        // don't believe the rest of the code is necessary
        // the one specific function of PCB I use follows
    
         public int getPriority()
         {
              return priority;
         }
    }
    

    在将PCB对象插入堆对象的ArrayList之后,我尝试了以下主要方法通过ArrayList调用PCB对象的函数。

    主要的Java语言

    public class Main 
    {
         public static void main(String[] args) throws HeapException
         {
              Heap temp = new Heap();
              PCB block = new PCB();
              PCB block1 = new PCB();
              PCB block2 = new PCB();
    
              temp.insert(block);
              temp.insert(block1);
              temp.insert(block2);
    
              block.getPriority();
    
              // does not work
              int num = temp.peek().getPriority();
              //does not work
              num = temp.get(0).getPriority();
    }
    

    我一直在尝试学习和应用泛型,但现在我被卡住了。

    如果我什么都不清楚,我可以轻松添加更多代码或澄清问题。

    谢谢

    2 回复  |  直到 7 年前
        1
  •  2
  •   MC Emperor    7 年前

    Heap temp = new Heap();
    

    你有一个通用的 Heap 类,但在这里您创建它时没有使用泛型。这是一个 Raw Types .

    Heap<PCB> temp = new Heap<>();
    

    应该有效。

        2
  •  2
  •   Pramod    7 年前

    将堆声明更改为

    Heap<PCB> temp = new Heap<>();