Java反射-プライベート属性とメソッドの取得


Java反射を復習して記録します
まずclassを作成し、プロパティとメソッドをprivate、プライベートタイプに設定します.
public class PrivateClass {

	private String id = "127.0.0.1";
	private String port = "8080";

	private String url() {
		return id + ":" +  port;
	}
}

Java反射メカニズムを使用して上のclassのプライベートメソッドとプロパティを取得するクラスを作成します.
	public static void main(String[] args) {
		try {
			Class> clazz = PrivateClass.class;//  PrivateClass 
			PrivateClass pc = (PrivateClass) clazz.newInstance();//  

			Field[] fs = clazz.getDeclaredFields();//  PrivateClass 
			for (int i = 0; i < fs.length; i++) {
				fs[i].setAccessible(true);//  
				System.out.println(" :" + fs[i].getName() + ":" + fs[i].get(pc));
				
				fs[i].set(pc, "null");// 
				System.out.println(" :" + fs[i].getName() + ":" + fs[i].get(pc));
			}
			
			Method[] ms = clazz.getDeclaredMethods();//  PrivateClass 
			for (int i = 0; i < ms.length; i++) {
				ms[i].setAccessible(true);//  
				System.out.println("  : " + ms[i].getName());// 
			}
			Method m = clazz.getDeclaredMethod("url");
			m.setAccessible(true);
			System.out.println("url :" + m.invoke(pc));// null:null
			
		} catch (InstantiationException | IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}

Java反射メカニズムの学習はまだ浅く,これを皮切りとしている.