さて、どうにかしてこれを達成できますか:
String myString = "someString";
Class myClass = myString.getClass();
HashMap<mClass, Integer> = new HashMap<myClass, Integer>();
だから、整数や文字列のような変数のキーのクラス型で、新しいハッシュマップを作成したいと思います...
さて、どうにかしてこれを達成できますか:
String myString = "someString";
Class myClass = myString.getClass();
HashMap<mClass, Integer> = new HashMap<myClass, Integer>();
だから、整数や文字列のような変数のキーのクラス型で、新しいハッシュマップを作成したいと思います...
これは不可能です。可能性をご案内します。
ジェネリックを使用してヘルパー メソッドを作成できます。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>();
型消去のため、これは機能しません。可能な (より冗長な方法) は、渡された引数に基づいて Map を返すファクトリ メソッドを作成することです。
MapFactory.create(String.class);
編集:これは直接インスタンス化と変わらないという@millimooseコメントへの回答(これは本当です):
独自の Map を実装するか、HashMap 実装を装飾または拡張して、型情報を保持することを試みることができます。