Map<String, Integer> instance = new TreeMap<String, Integer>();
@SuppressWarnings("unchecked")
Map<String, Integer> map =
createMap((Class<? extends Map<String, Integer>>)instance.getClass());
map.put("x", 1);
System.out.println("THIS IS x: " + map.get("x"));
これにより、1が適切に出力されます。メソッドの実装が最も可能性が高い
try
{
return clazz.newInstance();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
APIのより良い実装は、タイプを尋ね、すべての詳細を尋ねるのではなく、選択T
したものを返すことです。Map
それ以外の場合は、データが入力されていない限り、次のようにジェネリック型引数を使用してMap
をインスタンス化できます。Map
public static <T> Map<String, T> getMap()
{
return new TreeMap<String, T>();
}
その後、警告なしでそれにアクセスできます。
// note the lack of type arguments, which are inferred
Map<String, Integer> instance = getMap();
// alternatively, you could do it more explicitly:
// Map<String, Integer> instance = ClassName.<Integer>getMap();
実装に完全に一致するものを返すことを除いて、彼らがあなたのClass
タイプを尋ねる理由は本当にありません(たとえば、あなたがに固執する場合、あなたは戻ってきます、そしてあなたがに固執する場合、あなたは返されます)。ただし、はそれが構築されたものを失うと思われます。これはの不変( )フィールドであるため、修正することはできません。つまり、その場合は同じではなく、あなたが望むものになる可能性も低いということです。Map
HashMap
HashMap
TreeMap
TreeMap
TreeMap
Comparator
final
TreeMap
Map
彼らがMap
データを入力している場合、それはさらに意味がありません。いつでもaのインスタンスを渡して入力するか、単純にラップできるMap
aを返すようにすることができ(たとえば)、データに最も有用なものを知っている必要があります。Map
new TreeMap<String, Integer>(instance);
Map