如何在另一个 class 中使用 Queue.java

how to use Queue.java in another class

import java.util.Arrays;

public class Queue <T>{
    private T[] QueueArr;
    private int front; 
    private int back;
    private int size; 

    public Queue(){}

    @SuppressWarnings("unchecked")
    public Queue (int size)
    { 
        if (size <= 0)
            throw new IllegalArgumentException("Size cannot be less than or equal to 0!");
        this.size = size;
        QueueArr = (T[]) new Object[size];
        front = -1;
        back = -1;
    }

    public boolean isEmpty ()
    {
        if (front == -1 &&back == -1)
            return true;
        else 
            return false;
    }

    public boolean isFull()
    {
    return (back +1) % size == front;
    }

    public void enQueue ( T ele)
    {
        if (isFull())
            throw new IllegalStateException ("The Queue is full!");
        else if (isEmpty())
        {
            front++;
            back++;
        }
        else
        {
            back +=1;
        }
        QueueArr[back] = ele;
    }

    public void deQueue()
    {
        if (isEmpty())
            throw new IllegalStateException("Can't dequeue an empty queue!");
        else if (front == back)
        {
            front =-1;
            back = -1;
        }
        else
        {
            front = (front + 1) % size;
        }
    }   
    public T Front()
    {
        if(front == -1)
        {
            throw new IllegalStateException("Can't return from an empty queue!");
        }                   
        return QueueArr[front];
    }

    @Override
    public String toString()
    {
        return ("front is " + front + ", back is " + back +", size is " + size + "Queue is " + Arrays.toString(QueueArr));
    }   
}

我已经使用循环数组算法实现了队列数据结构,我正在尝试在另一个 class.

中实现这个队列 class

例如:public class 库存{}

会不会是这样的:

public class Inventory extends Queue{}

当我执行上面的行时,我确实收到警告 "Queue is a raw type. References to generic type Queue should be parameterized"。

我是 Java.Thank 的初学者,希望能提供帮助。

您的 Queue 是参数化的 class。 Java 警告您扩展它的 class(Inventory,在您的情况下)可能也应该被参数化:

public class Inventory <T> extends Queue<T> {
    // ...
}

在重复使用 class 之前,您需要问问自己,is Inventoty a queue or does inventory has a queue?明白这一点,你就会知道Inventory是否需要扩展Queue,或者有一个类型为Queue的字段。

回答问题需要问自己的一些问题:

  1. 是否要在 Inventory 上使用所有队列的方法,包括 front()enqueue()dequeue()
  2. 您希望以后能够重用 Inventory 来支持不是 Queue 的数据(也许 Stack?)- 有关系通常更容易重构。
  3. 您希望能够将 Inventory 传递给接受 Queue 作为参数的方法吗?

如果库存是一个队列(我不相信这是你想要的),你确实需要扩展它:

public class Inventory <T> extends Queue<T>{}

或者如果 Inventory 在队列中只有一种类型的元素(假设为 Item):

public class Inventory extends Queue<Item>{}

但是,如果更可能的情况,Inventory有一个Queue,则需要在Inventory中分配一个字段,类型为Queue:

public class Inventory <T> {
     private Queue<T> queue;
}

或者,如果它只有一种类型的项目:

public class Inventory {
     private Queue<Item> queue;
}