web-dev-qa-db-ja.com

「タイプをインスタンス化できません...」

このコードを実行しようとすると:

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

私はこのエラーを受け取ります:

スレッド「メイン」の例外Java.lang.Error:未解決のコンパイル問題:
 TwoColor.main(TwoColor.Java:8)でタイプQueue 
をインスタンス化できません

クラスをインスタンス化できない理由がわかりません...それは私には正しいようです...

25
StickFigs

Java.util.Queueはインターフェイスなので、直接インスタンス化することはできません。 LinkedListなどの具象サブクラスをインスタンス化できます。

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

Queue はインターフェイスなので、直接開始することはできません。実装クラスの1つによって開始します。

ドキュメントから、すべての既知の実装クラス:

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

要件に基づいて上記のいずれかを使用して、Queueオブジェクトを開始できます。

26
Harry Joy

キューはインターフェースクラスではありません。

4
Andrew Lazarus

使用できます

Queue thequeue = new linkedlist();

または

Queue thequeue = new Priorityqueue();

理由:キューはインターフェースです。そのため、具体的なサブクラスのみをインスタンス化できます。

3
Amit Anand

インターフェイスをインスタンス化しようとしています。使用する具体的なクラス、つまりQueue<Edge> theQueue = new LinkedBlockingQueue<Edge>();を指定する必要があります。

3
Jugal Shah