Java 1.8で作業していますが、HashMapでKとVのクラスを決定する必要があります。 私の最初の試みはうまくいかず、私はここからどこに行くのか分かりません。通常、あなたが原因型消去にKとVの種類を取得することができませんコンテナテンプレートクラスを決定する方法
Class :: HashMap
java.util.AbstractMap<K, V>
K
V
Java 1.8で作業していますが、HashMapでKとVのクラスを決定する必要があります。 私の最初の試みはうまくいかず、私はここからどこに行くのか分かりません。通常、あなたが原因型消去にKとVの種類を取得することができませんコンテナテンプレートクラスを決定する方法
Class :: HashMap
java.util.AbstractMap<K, V>
K
V
:私はこの
public static int foo(Object obj){
int result = 0;
String x = obj.getClass().getSimpleName();
switch(x){
case "HashMap":
Type sooper = obj.getClass().getGenericSuperclass();
Type key = ((ParameterizedType)sooper).getActualTypeArguments()[ 0 ];
Type value = ((ParameterizedType)sooper).getActualTypeArguments()[ 1 ];
System.out.println(sooper.getTypeName());
System.out.println(key.getTypeName());
System.out.println(value.getTypeName());
break;
}
}
public static void main(String[] args) {
foo(new HashMap<Integer,Character>());
}
出力を供給するために期待しています。テンプレートオブジェクトを作成した後、システムは <unique_type K, unique_type V>
として、それを見ていないのではなく <Object K, Object V>
私はいくつか見ていたし、それは醜いを提供していますSO上でここにanother questionを見つけましたが、問題の解決策を作業します。
私はいくつかのソリューションを試してみましたが、どれも解決しませんでした。私は "不可能"と一緒に行きます。みなさんありがとう。 – BAMF4bacon
これは、関数呼び出し側がこの場合にクラスを知っていたので、これをEnum型を使用して関数の引数として渡すことで、私自身が解決しました。
次のURLをご覧ください:https://stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime? –
リンクありがとうございます。私が間違っていない限り、これは宣言されたクラスを知っているときに機能します。 GenericClass(新しいHashMap)のようなことはできません。それはHashMapだと私に伝えます。私は元の問題に戻ります。 –
BAMF4bacon
もう1つのオプションは、マップからいくつかの要素を取得し、その上で 'getClass'を呼び出すことですが、それらが正確な型の' K'と 'V'(サブタイプかもしれない)という保証はありません。それ以外の場合は不可能です。 –