「Java/reflection」の版間の差分
ナビゲーションに移動
検索に移動
| 43行目: | 43行目: | ||
</pre> | </pre> | ||
===reflectionでprivateのメソッドにアクセス=== | |||
Animal.java | Animal.java | ||
<pre> | <pre> | ||
2019年6月18日 (火) 09:00時点における版
reflectionとは
privateのプロパティやメソッドにアクセスする
reflectionサンプル
通常アクセス
Animal.java
public class Animal {
public String name = "animal";
public int foot = 4;
public int getFoot() {
return foot;
}
}
main.java
Animal animal = new Animal(); Log.i(TAG, "name=" + animal.name); // animal Log.i(TAG, "foot=" + animal.foot); // 4 Log.i(TAG, "getFoot=" + animal.getFoot()); // 4
reflectionでprivateプロパティアクセス
Animal.java
public class Animal {
private String name = "animal";
private int foot = 4;
}
main.java
Animal animal = new Animal();
Class animalClass = animal.getClass();
Field nameField = animalClass.getDeclaredField("name");
Field footField = animalClass.getDeclaredField("foot");
nameField.setAccessible(true);
footField.setAccessible(true);
Log.i(TAG, "nameField=" + (String)nameField.get(animal)); // animal
Log.i(TAG, "footField=" + (int)footField.get(animal)); // 4
reflectionでprivateのメソッドにアクセス
Animal.java
public class Animal {
private String name = "animal";
private int foot = 4;
private int getFoot() {
return foot;
}
}
main.java
Animal animal = new Animal();
Class animalClass = animal.getClass();
Method method = animalClass.getDeclaredMethod("getFoot");
method.setAccessible(true);
Log.i(TAG, "getFootField=" + (int)method.invoke(animal)); // 4