web-dev-qa-db-fra.com

"Impossible d'instancier le type ..."

Lorsque j'essaie d'exécuter ce code:

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;
        }
    }
}

Je reçois cette erreur:

Exception dans le thread "principal" Java.lang.Error: problème de compilation non résolu: 
 Impossible d'instancier le type Queue 
 Sur TwoColor.main (TwoColor.Java:8)

Je ne comprends pas pourquoi je ne peux pas instancier la classe ... Cela me semble juste ...

25
StickFigs

Java.util.Queue est une interface, vous ne pouvez donc pas l'instancier directement. Vous pouvez instancier une sous-classe concrète, telle que LinkedList:

Queue<T> q = new LinkedList<T>;
44
Cameron Skinner

Queue est une interface, vous ne pouvez donc pas l'initier directement. Initiez-le par l'une de ses classes d'implémentation.

À partir de la documentation, toutes les classes d'implémentation connues:

  • AbstractQueue
  • ArrayBlockingQueue
  • ArrayDeque
  • ConcurrentLinkedQueue
  • DelayQueue
  • LinkedBlockingDeque
  • LinkedBlockingQueue
  • LinkedList
  • PriorityBlockingQueue
  • File d'attente de priorité
  • SynchronousQueue

Vous pouvez utiliser l'une des méthodes ci-dessus en fonction de vos besoins pour lancer un objet Queue.

26
Harry Joy

La file d'attente est une Interface pas une classe.

4
Andrew Lazarus

Vous pouvez utiliser

Queue thequeue = new linkedlist();

ou

Queue thequeue = new Priorityqueue();

Raison: la file d'attente est une interface. Vous ne pouvez donc instancier que sa sous-classe concrète.

3
Amit Anand

Vous essayez d'instancier une interface, vous devez donner la classe concrète que vous souhaitez utiliser, c'est-à-dire Queue<Edge> theQueue = new LinkedBlockingQueue<Edge>();.

3
Jugal Shah