Java では、次の情報があるとします: 、およびオブジェクトList.class, Map.class, Integer.class
のインスタンス。foo
にキャストfoo
することは可能List<Map<Integer, Integer>>
ですか? 型消去によるものではないと思いますが、同様のことを達成する別の方法があるかどうか疑問に思っています。
編集:より多くのコンテキストを提供するため。クエリ (オブジェクトとメトリックで構成される) を受け取り、目的のメトリックを出力できるアプリケーションを作成しています。例としては、「リスト内の要素の合計」があります。クライアントは、自身をアプリに登録し、オブジェクト タイプ (リストの合計など) に特定のメトリック タイプを提供できることをブロードキャストするプロバイダーを作成する必要があります。calculate
アプリは、クエリを受信すると、正しいプロバイダーを照合し、そのメソッドを呼び出します。
ジェネリックがなければ、これは簡単です。オブジェクトのインスタンスの正規型は、そのクラスです。したがって、クエリ内のオブジェクトを として扱い、Object
その を使用してclass
、オブジェクトのこのインスタンスを提供できるプロバイダーを見つけます。メトリックについても同様です。
f
ジェネリックを紹介します...要素が である場合はリスト内の要素の合計であり、要素がInteger
である場合は製品であるとメトリックを定義するとしますDouble
。を提供するプロバイダーと を提供するプロバイダーの 2 つが必要List<Integer>
ですList<Double>
。しかし、型消去のため、正規型class
を直接使用することはできません。List.class
そのため、関連するクラス ( andInteger.class
またはList.class
and )を格納し、Double.class
クラスのタプルを使用してプロバイダーを照合します。
したがって、メソッドでは、プロバイダーが処理する適切な型へのcalculate
共変キャストを実行する必要があります。Object
おそらく私は問題に対して間違ったアプローチを取っていますか?