2013-07-03 13 views
5

Javaジェネリックのトピック全体を理解しようとしています。Javaジェネリックメソッドのパラメータ

具体的には、この問題

public class Node<E>{ 
    private E data; 
    public Node(E data){ 
     this.data=data; 
    } 
    public E get(){ 
     return this.data; 
    } 
    public void set(E data){ 
     this.data=data; 
    } 
} 

どのように私は、ノードが、その場合にはE またはにEのいずれかの継承クラスを(受けることができ方法を設定することを指定し、ワイルドカードを「拡張」を追加することができますパラメータのアップキャスト版を保持する)。

それをそのまま残しても動作しますか?

(Iビットがジェネリック型の不変の様相と混同される可能性があります。)

ありがとう!

+3

これはすでにあなたがしたいことをするでしょう... –

+0

私は質問をdownvoted。ご自分で少しでも仕事をすれば、簡単に答えることができます。あなたはGoogleを必要としません、任意のJava IDEでctrl-spaceを使用し、あなた自身のために見てください。 – Dariusz

+0

@Dariuszあなたは何でも自由にできます。 問題は、コードが実際にどうやってうまく動作しているかわからなくても、コードが「機能する」ことがあることです。 だから私はここで尋ねた。 – Paz

答えて

3

あなたのクラスは、あなたが必要としていることをすでにしています。例を挙げて説明しましょう。ノード(NumberIntegerLongなどのスーパークラスです)を作成したとします。

Node<Number> numberNode = new Node<Number>(1); 

あなたは

​​
3

の継承クラスをすでに受け付けているクラスNode<E>を宣言しました。あなたは、あなたがそれが奇妙であったとしても、SomeTypeもここinterfaceことができることをimplements or extends SomeType 思い出してくれることを任意のオブジェクトを渡すことができ

public void set(E extends SomeType){ 
this.data=data; 
} 

を使用する場合は

+2

は、コレクションをジェネリックスとして渡す場合とは異なりますか? 'someMethod(ArrayList )'と書くと、 'E'型の配列リストだけが渡せるためです。 –

+2

@PrasadKharkarいいえ、見つかった!はい、彼らは異なっています。 – johnchen902

+0

オハイオ州...良いこと:)知識に追加されました。ありがとうございました –

0

は、我々はE extends SomeTypeを記述する必要があります。

0

それとも、それは動作しますまた、そのサブクラスを渡すことによって設定されたメソッドを呼び出すことができますか...?

それともtried it out if it worksがありますか?

 final Node<Number> n = new Node<Number>(new Integer(666)); 
     System.out.println(n.get()); 
     n.set(new Integer(777)); 
     System.out.println(n.get()); 
関連する問題