0

このパターンが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をコーディングしていません。

4

2 に答える 2

11
public <T extends Directory> T getDirectory(Class<T> type) { ... }

MyDirectory directory = getDirectory(MyDirectory.class);
于 2011-04-27T15:12:37.020 に答える
4

メソッド自体を汎用に変更することで、キャストを回避できます。

public <T extends Directory> T getDirectory(Class<T> type)

その後:

MyDirectory directory = getDirectory(MyDirectory.class);

ここでは、引数からの型推論を使用して、の型を決定していますT

ただし、を渡す必要があります。そうしClass<T>ないと、型消去が開始され、メソッドは:(のインスタンスを作成するための型を認識しません。

型消去の詳細およびJavaジェネリックに関するその他すべての詳細については、AngelikaLangerのJavaGenericsFAQを参照してください

于 2011-04-27T15:15:09.227 に答える