0

さて、どうにかしてこれを達成できますか:

String myString = "someString";
Class myClass = myString.getClass();

HashMap<mClass, Integer> = new HashMap<myClass, Integer>();

だから、整数や文字列のような変数のキーのクラス型で、新しいハッシュマップを作成したいと思います...

4

2 に答える 2

1

これは不可能です。可能性をご案内します。

ジェネリックを使用してヘルパー メソッドを作成できます。Objectすべてのジェネリックが単純なsにコンパイルされるため、これは機能します。

public static <T> Map<T, Integer> createMap(Class<T> cl)
{
    return new HashMap<T, Integer>();
}

これで、次のように使用できます。

Map<String, Integer> map = createMap(String.class);

ただし、これには、コンパイル時に T が何であるかを知る必要があります。したがって、これは機能しません:

String str = "Test";
Class cl = str.getClass();
Map<String, Integer> map = createMap(cl); // Doesn't compile.

結論として、このヘルパー メソッドは何の価値もありません。

Map<String, Integer> map = new HashMap<String, Integer>();
于 2013-09-07T14:20:11.523 に答える
0

型消去のため、これは機能しません。可能な (より冗長な方法) は、渡された引数に基づいて Map を返すファクトリ メソッドを作成することです。

MapFactory.create(String.class);

編集:これは直接インスタンス化と変わらないという@millimooseコメントへの回答(これは本当です):

独自の Map を実装するか、HashMap 実装を装飾または拡張して、型情報を保持することを試みることができます。

于 2013-09-07T14:11:43.360 に答える