11

ジェネリックで何をしているのか知っていると思っていましたが、どうやらそうではありませんでした。

ArraySetList<char> setA = new ArraySetList<char>();

コンパイルすると、次のようになります。

error: unexpected type
ArraySetList<char> setA = new ArraySetList<char>();
             ^
required: reference
found:    char

後続のすべての文字に対して同じエラーが発生します。文字の新しい ArraySetList を宣言する方法を知りたいです。

ここにすべてのファイルがあります。

http://pastebin.com/4h37Xvu4     // ArraySetList (extends ArrayUnsortedList)
http://pastebin.com/FxmynzkC     // Driver
http://pastebin.com/CgVA0zjY     //ArrayUnsortedList (implements ListInterface)
http://pastebin.com/3iXrCsCc     //ListInterface\
4

2 に答える 2

17

Java Generics はオブジェクトに対して機能し、プリミティブ データ型に対しては機能しません。ただし、プリミティブ データ型を格納する必要がある場合は、対応するラッパー クラス オブジェクトを使用する必要があります。
これらのクラスは、オブジェクトの外観を与えるためにプリミティブ データ型を「ラップ」するだけです。

の場合char、対応するラッパー クラスはCharacterであるため、次のようにコード行を記述する必要があります。

ArraySetList<Character> setA = new ArraySetList<Character>();   

読んでください: http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

ただし、要素を追加するときは、 normal を追加しますchar。これは、必要に応じて Java が自動的に に変換し、自動的Characterにに戻すためです。これは、オートボクシング変換と呼ばれます。 char

オートボクシングは、Java コンパイラがプリミティブ型とそれに対応するオブジェクト ラッパー クラスとの間で行う自動変換です。たとえば、int から Integer への変換、double から Double への変換などです。変換が逆の場合、これはボックス化解除と呼ばれます。

ソース: http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

于 2013-10-23T00:54:02.767 に答える
7

ジェネリック型の引数には、参照型 (またはワイルドカード) が必要です。

プリミティブ型は使用できません (詳細については、制限を参照してください)。

ArraySetList<Character> setA = new ArraySetList<Character>();

使用可能な型については、JLS 4.5.1 の型引数とワイルドカードを参照してください。

于 2013-10-23T00:43:54.563 に答える