質問

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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top