ジェネリクスを使ってClassを渡してClassのインスタンスを返す

クラス全体でKとかVとか指定するのは前にやったけど、メソッド1つだけで有効なKとかVとかを指定する方法を知った。
スタティックメソッドとかの時に便利そう。
Class.forName()でClassを取ってくる方法だと、キャストしなきゃいけなそう。
 
Class.cast()というメソッドがあるのを発見した。
何が出来るのか知らないから、調べる余地あり。
 

import java.util.*;

public class GenericsTest
{
	public static void main(String[] args)
	{
		GenericsTest g = new GenericsTest();
		String ins_str = g.newInstance(String.class);
		Integer ins_int = g.newInstance(Integer.class);
		ArrayList<String> array_str = g.newArrayList(String.class);
		HashMap<String, Integer> hash_str_int = g.newHashMap(String.class, Integer.class);

		try {
			Class<?> cls = Class.forName("java.lang.String");
			String ins_str2 = (String)g.newInstance(cls);
		} catch (ClassNotFoundException e) {
		}
	}

	public <T> T newInstance(Class<T> cls)
	{
		T instance = null;
		try {
			instance = cls.newInstance();
		} catch (InstantiationException e) {
		} catch (IllegalAccessException e) {
		}
		return instance;
	}

	public <T> ArrayList<T> newArrayList(Class<T> cls)
	{
		return new ArrayList<T>();
	}

	public <K, V> HashMap<K, V> newHashMap(Class<K> cls1, Class<V> cls2)
	{
		return new HashMap<K, V>();
	}
}