2016-05-04 8 views
1

ジェネリックスまでJavaでうまくいきました。私はすべてのデータ型を受け入れるジェネリックを使用するためにこのキューを変換するのに苦労しています。Javaのジェネリックを使用してint型をint型に変換できません

itemitemは、「任意の」データ型を表す必要がある場合intに変換するカント私はなぜ理解していません。

また、削除関数も作成する必要があるので、ジェネリックスについての説明と少し説明すると便利です。

private int initialCapacity = 10; 
private int size = 0; 
private int[] content; 

public static <E> void add(E item) { 
    int size = 0; 
    int[] content; 

    // If we run out of space in the array 
    if (size == content.length) { 

     // 1) Create a new, larger array (2x) 
     int[] newArray = new int[content.length * 2]; 

     // 2) Copy the content from the old array to the new one 
     for (int c = 0; c < content.length; c++) { 
      newArray[c] = content[c]; 
     } 

     // 3) Let the old array point to the new array 
     content = newArray; 
    } 

    //Add the item to the content of the array list 
    content[size] = item; 
    size++; 
} 
+0

なぜそれがintであることが分かっているのですか? –

+0

まず、プリミティブ*ではジェネリックスは機能しません。第二に、「E」は制約されていないので、何でもよい。 'String'、' int = String'は無効です。 – Andreas

答えて

0

ジェネリックでは、プリミティブ型はサポートされていません。 intの代わりにIntegerを使用するだけです。アプリケーションの場合はほとんど同じです。

はあまりにもここを参照してください:Why don't Java Generics support primitive types?

+0

は解決しませんでした – jjflyV7

3

はのは、上から始めましょう。 Eはタイプパラメータなので、最初にそのスコープを理解する必要があります。通常、キューの場合、型パラメータは、キューが一貫性のある型を持つようにするため、キュー全体に適用されます(単一のadd)。このように、のようにクラスを宣言することから始めます:

public class YourQueue<E> { 
    ... 
} 

、それpublic void add(E item)作り、addためのメソッド宣言から<E>を削除します。特定のキューに追加する必要があるため、静的と宣言した理由は不明です。

第3に、配列を使用してYourQueue<E>の要素を格納する場合は、すべての種類のオブジェクトが整数に変換できないため、整数配列であってはなりません。 E[]と宣言された配列である必要があります。

+0

私はまだこの行の項目にエラーが表示されます。 "content [size] = item;"私の追加で:Eからintに変換できません – jjflyV7

関連する問題