2017-06-01 7 views
1

Java 1.8で作業していますが、HashMapでKとVのクラスを決定する必要があります。 私の最初の試みはうまくいかず、私はここからどこに行くのか分かりません。通常、あなたが原因型消去にKとVの種類を取得することができませんコンテナテンプレートクラスを決定する方法

Class :: HashMap 
java.util.AbstractMap<K, V> 
K 
V 
+0

次のURLをご覧ください:https://stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime? –

+0

リンクありがとうございます。私が間違っていない限り、これは宣言されたクラスを知っているときに機能します。 GenericClass(新しいHashMap )のようなことはできません。それはHashMapだと私に伝えます。私は元の問題に戻ります。 – BAMF4bacon

+0

もう1つのオプションは、マップからいくつかの要素を取得し、その上で 'getClass'を呼び出すことですが、それらが正確な型の' K'と 'V'(サブタイプかもしれない)という保証はありません。それ以外の場合は不可能です。 –

答えて

0

:私はこの

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を見つけましたが、問題の解決策を作業します。

+0

私はいくつかのソリューションを試してみましたが、どれも解決しませんでした。私は "不可能"と一緒に行きます。みなさんありがとう。 – BAMF4bacon

0

これは、関数呼び出し側がこの場合にクラスを知っていたので、これをEnum型を使用して関数の引数として渡すことで、私自身が解決しました。

関連する問題