2

ListNode をインナークラスとしてクラス、二重リンク リストを作成しています。

public class DoublyLinkedList<Integer> {

    /** Return a representation of this list: its values, with adjacent
     * ones separated by ", ", "[" at the beginning, and "]" at the end. <br>
     * 
     * E.g. for the list containing 6 3 8 in that order, return "[6, 3, 8]". */
    public String toString() {
        String s;

        ListNode i = new ListNode(null, null, *new Integer(0)*);

エラーが発生し、タイプをインスタンス化できないのはなぜIntegerですか?

4

1 に答える 1

11

クラス定義のは、ラッパー クラスIntegerを非表示にするジェネリック型パラメーターです。Integer

したがって、new Integer(0)クラス内で使用すると、型自体Integerではなく、型パラメーターとして取得されます。Integertype parameterの場合、そのクラスでは型がジェネリックであるため、T単に実行することはできません。new T();コンパイラは、それが正確にどのタイプであるかを知りません。したがって、コードは無効です。

クラスを次のように変更してみてください。

public class DoublyLinkedList<T> {
    public String toString() {
        ListNode i = new ListNode(null, null, new Integer(0));
        return ...;
    }
}

それが動作します。しかし、私はあなたが本当にこれを望んでいるのではないかと思います. ジェネリック クラス内で型パラメーターをインスタンス化する必要があると思います。まあ、それは直接不可能です。

次のようにそのクラスをインスタンス化するときに、実際の型引数を渡します。

DoublyLinkedList<Integer> dLinkedList = new DoublyLinkedList<>();

PS:問題の説明を明確に説明し、質問にもう少し文脈を入れたほうがよいでしょう。

于 2013-09-23T06:22:25.443 に答える