«Не удается создать экземпляр типа ...» - PullRequest
25 голосов
/ 28 апреля 2011

Когда я пытаюсь запустить этот код:

import java.io.*;
import java.util.*;

public class TwoColor
{
    public static void main(String[] args) 
    {
         Queue<Edge> theQueue = new Queue<Edge>();
    }

    public class Edge
    {
        //u and v are the vertices that make up this edge.
        private int u;
        private int v;

        //Constructor method
        public Edge(int newu, int newv)
        {
            u = newu;
            v = newv;
        }
    }
}

Я получаю эту ошибку:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Cannot instantiate the type Queue
    at TwoColor.main(TwoColor.java:8)

Я не понимаю, почему я не могу создать экземпляр класса ... Мне кажется, это правильно ...

Ответы [ 5 ]

44 голосов
/ 28 апреля 2011

java.util.Queue - это интерфейс, поэтому вы не можете создать его экземпляр напрямую. Вы можете создать конкретный подкласс, такой как LinkedList:

Queue<T> q = new LinkedList<T>;
26 голосов
/ 28 апреля 2011

Очередь - это интерфейс, поэтому вы не можете инициировать его напрямую. Инициируйте его одним из реализующих классов.

Из документов все известные классы реализации:

  • AbstractQueue
  • ArrayBlockingQueue
  • ArrayDeque
  • ConcurrentLinkedQueue
  • DelayQueue
  • LinkedBlockingDeque
  • LinkedBlockingQueue
  • LinkedList
  • PriorityBlockingQueue
  • PriorityQueue
  • SynchronousQueue

Вы можете использовать любой из вышеперечисленных в зависимости от ваших требований, чтобы инициировать объект очереди.

4 голосов
/ 28 апреля 2011

Очередь - это Интерфейс , а не класс.

3 голосов
/ 21 октября 2014

Вы можете использовать

Queue thequeue = new linkedlist();

или

Queue thequeue = new Priorityqueue();

Причина: очередь является интерфейсом.Таким образом, вы можете создать экземпляр только своего конкретного подкласса.

3 голосов
/ 28 апреля 2011

Вы пытаетесь создать экземпляр интерфейса, вам нужно указать конкретный класс, который вы хотите использовать, т.е. Queue<Edge> theQueue = new LinkedBlockingQueue<Edge>();.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...