2016-06-16 8 views
0
ここ

に変換することはできませんが、私のコードです:互換性のない型:java.lang.Objectのは、T

Error: incompatible types : java.lang.Object cannot be converted to T 

I:私はpopメソッドでエラーが出ます

package datastructures; 

import java.util.Iterator; 

public class Stack<T>{ 
    private class Node<T>{ 
     T data; 
     Node next; 
    } 
    private int size; 
    private Node head; 
    private Node newNode(T data){ 
     Node new_node = new Node(); 
     new_node.data = data; 
     new_node.next = null; 
     return new_node; 
    } 
    public Stack(){ 
     size = 0; 
     head = null; 
    } 

    public T pop() { 
     if(head == null) 
      return null; 
     T ret_val = head.data; //Error here 
     head = head.next; 
     this.size--; 
     return ret_val; 
    } 
} 

、ここでエラーですこのエラーを理解していない、私はコード内の任意の場所にオブジェクトを使用していない。

答えて

4

あなたは

private class Node<T> 

としてノードを宣言するときは、囲むタイプTなどの別のTとジェネリック型を宣言しています。あなたは

private class Node<E> 

として、それを宣言しているかのように、それはちょうど

private class Node 
を使用します、要するに、T.そうに隠れています
0

ノードのデータフィールドは、そのタイプを知らない。

の頭をに初期化するときにタイプを指定してください。

private Node<T> head; 
private Node<T> newNode(T data){ 
    Node new_node = new Node<T>(); 
    new_node.data = data; 
    new_node.next = null; 
    return new_node; 
} 

さて、new_nodeデータフィールドがタイプTであることを知っています。

0

あなたは、独自の型パラメータを持つNodeインナータイプを宣言StackのようTNodeの影T、彼らは本質的に異なる種類があります。

private Node newNode(T data) { 
    Node<T> new_node = new Node<>(); 
    new_node.data = data; 
    new_node.next = null; 
    return new_node; 
} 

:あなたはダイヤモンド演算子で型指定された変数を使用することができます(Javaの8のために)あなたのNodeタイプの型パラメータ<T>

削除宣言(それはあなたがそれのために何を意味するか、おそらくです)

0

それ以外の場合、ジェネリックはObjectとして初期化され、エラーが表示されます。

関連する問題