2012-01-06 21 views
0

generics hereジェネリック型クラスのdefition

の素敵な議論があります。しかし、彼らはすべてのクラスは、ジェネリック型の変数を受け入れることができる方法について話しています。私の質問は、ジェネリック型のクラス定義です。

クラスは今、私は戻り値の型がTであることを理解し

protected final <T> T getBeanFromSpringContext(String name, Class<T> requiredType) { 
    if(springApplicationContext != null) { 
     return springApplicationContext.getBean(name, requiredType); 
    } else { 
     return null; 
    } 
} 

として定義されます。しかし、その後<T>は、このClassオブジェクトによってモデル化されたクラスの型です。これは私がタイプを知らないので、なぜ<?>ではないのですか?

戻り値の型はTです。上記のように、このクラスはnullを返すことができますか?

+1

ところで、私はこのシングルラインのスタイルを好みますか? null:springApplicationContext.getBean(name、requiredType); ' – Bohemian

答えて

2

その前<T>は、メソッドがジェネリックであると言って宣言され、そしてそれはdefinition of a type variableだ、である - つまりtypeパラメータTを持っています。

それは少し違うかもしれない:その値に、あなたは型パラメータを持っていることを言うだろうだけでなく、いくつかの制約をかけることになり、「境界」

protected final <T extends Collection> T getBeanFromSpringContext(String name, Class<T> requiredType) { 
    if(springApplicationContext != null) { 
     return springApplicationContext.getBean(name, requiredType); 
    } else { 
     return null; 
    } 
} 

更新:現在、null部分にあります。残念なことに、すべての非プリミティブ型はJavaで "this type or null"を意味します。そう、はい、いつでもnullを返すことができます。そしてあなたはいつもNPEを得ることができます。 `リターンspringApplicationContext == nullの:

An obligatory Angelika Langer's FAQ link

関連する問題