Java反射-プライベート属性とメソッドの取得
1628 ワード
Java反射を復習して記録します
まずclassを作成し、プロパティとメソッドをprivate、プライベートタイプに設定します.
Java反射メカニズムを使用して上のclassのプライベートメソッドとプロパティを取得するクラスを作成します.
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反射メカニズムの学習はまだ浅く,これを皮切りとしている.