"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 in thread "main" java.lang.Error: Unresolved compilation problem: 
    Cannot instantiate the type Queue
    at TwoColor.main(TwoColor.java:8)

Je ne comprends pas pourquoi je ne peux pas instancier la classe... Il me semble bon pour moi...

24
demandé sur StickFigs 2011-04-28 08:40:46

5 réponses

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

Queue<T> q = new LinkedList<T>;
43
répondu Cameron Skinner 2011-04-28 04:44:29

File d'attente est une Interface de sorte que vous ne pouvez pas l'initier directement. Initiez-le par l'une de ses classes d'implémentation.

À partir des documents toutes les classes d'implémentation connues:

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

Vous pouvez utiliser l'un des éléments ci-dessus en fonction de vos besoins pour lancer un objet File d'attente.

25
répondu Harry Joy 2011-04-28 06:30:11

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

4
répondu Andrew Lazarus 2011-04-28 04:44:18

Vous essayez d'instancier une interface, vous devez donner le béton de classe que vous souhaitez utiliser c'est à dire Queue<Edge> theQueue = new LinkedBlockingQueue<Edge>();.

3
répondu Jugal Shah 2011-04-28 04:47:15

Vous pouvez utiliser

Queue thequeue = new linkedlist();

Ou

Queue thequeue = new Priorityqueue();

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

3
répondu Amit Anand 2014-10-21 12:38:54