質問
Javaでこのパターンが何と呼ばれるのか本当にわからないので、これをより良いタイトルにする方法がわかりません。
今、私はこの署名の方法を持っています:
public Directory getDirectory(Class<? extends Directory> type) { ... }
そして、あなたはそれをこのように呼びます:
MyDirectory directory = (MyDirectory)getDirectory(MyDirectory.class);
タイプの制約により、それが保証されます MyDirectory
派生する必要があります Directory
.
私が本当にやりたいのは、キャストを避け、必要なコードの量を減らすことです。 C#で言うことができます:
MyDirectory directory = getDirectory<MyDirectory>();
Javaでこれや似たようなことをする方法はありますか?バージョン1.4以降、Javaをコーディングしていません!
解決
public <T extends Directory> T getDirectory(Class<T> type) { ... }
MyDirectory directory = getDirectory(MyDirectory.class);
他のヒント
さて、メソッド自体を一般的に変更することで、キャストを避けることができます。
public <T extends Directory> T getDirectory(Class<T> type)
その後:
MyDirectory directory = getDirectory(MyDirectory.class);
ここでは、引数からタイプ推論を使用して、のタイプを決定します T
.
しかし、あなたはそれに合格する必要があります Class<T>
で、それ以外の場合はタイプの消去が始まり、メソッドは:(
タイプの消去の詳細と、Javaジェネリックに関係する他のすべてについては、Angelika Langer'sを参照してください Java Generics FAQ.
所属していません StackOverflow