Java (Android): 文字列をクラス名としてインスタンス化する

StringToClassActivity

Java: StringToClassActivity.java

package jp.feb19.snippets;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class StringToClassActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.VERTICAL);
		
		Class<?> cls;
		try {
			cls = Class.forName("android.widget.Button");
			Constructor<?> constructor = cls.getConstructor(Context.class);
			View view = (View)constructor.newInstance(this);
			layout.addView(view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
			
			cls = Class.forName("android.widget.AnalogClock");
			Constructor<?> constructor2 = cls.getConstructor(Context.class);
			View view2 = (View)constructor2.newInstance(this);
			layout.addView(view2, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

			cls = Class.forName("android.widget.RadioButton");
			Constructor<?> constructor3 = cls.getConstructor(Context.class);
			View view3 = (View)constructor3.newInstance(this);
			layout.addView(view3, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
		} catch (ClassNotFoundException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		setContentView(layout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
	}
}