fork download
  1. import java.lang.reflect.Field;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. HasPrivate hasPrivate = new HasPrivate();
  6.  
  7. Nakami nakami = new Nakami();
  8. System.out.println("Nakamiをセットします。");
  9. setNakami(hasPrivate, nakami);
  10. System.out.println("セットしたNakamiを取得します。");
  11. getNakami(hasPrivate, nakami);
  12. System.out.println("もともと入れてあるNakamiを取得します。");
  13. getArimasu(hasPrivate);
  14. }
  15.  
  16.  
  17. public static void setNakami(HasPrivate hasPrivate, Nakami nakami) {
  18. try {
  19. Field privateField = HasPrivate.class.getDeclaredField("nakami");
  20. privateField.setAccessible(true);
  21. privateField.set(hasPrivate, nakami);
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. } catch (IllegalAccessException e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. } catch (NullPointerException e){
  30. e.printStackTrace();
  31. }
  32. }
  33.  
  34. public static void getNakami(HasPrivate hasPrivate, Nakami nakami) {
  35. try {
  36. Field privateField = HasPrivate.class.getDeclaredField("nakami");
  37. privateField.setAccessible(true);
  38. Nakami nakami2 = (Nakami) privateField.get(hasPrivate);
  39. System.out.println("取得したnakami:" + nakami2);
  40. System.out.println("HasPrivateからもらったnakami:"+hasPrivate.getNakami());
  41. System.out.println("Nakamiのnakami:" + nakami2.nakami);
  42. } catch (Exception e){
  43. e.printStackTrace();
  44. }
  45. }
  46.  
  47. public static void getArimasu(HasPrivate hasPrivate) {
  48. try {
  49. Field arimasu = HasPrivate.class.getDeclaredField("arimasu");
  50. arimasu.setAccessible(true);
  51. Nakami nakami = (Nakami) arimasu.get(hasPrivate);
  52. System.out.println("取得したarimasu:" + nakami);
  53. System.out.println("HasPrivateからもらったariamsu:"+hasPrivate.getArimasu());
  54. System.out.println("arimasuのnakami:" + nakami.nakami);
  55. } catch (Exception e){
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60.  
  61. class HasPrivate {
  62. private Nakami nakami;
  63. private Nakami arimasu=new Nakami();
  64.  
  65. public Nakami getNakami(){
  66. return nakami;
  67. }
  68.  
  69. public Nakami getArimasu(){
  70. return arimasu;
  71. }
  72. }
  73.  
  74.  
  75.  
  76. class Nakami {
  77. public String nakami="中身";
  78. }
Success #stdin #stdout 0.11s 320512KB
stdin
Standard input is empty
stdout
Nakamiをセットします。
セットしたNakamiを取得します。
取得したnakami:Nakami@10dea4e
HasPrivateからもらったnakami:Nakami@10dea4e
Nakamiのnakami:中身
もともと入れてあるNakamiを取得します。
取得したarimasu:Nakami@647e05
HasPrivateからもらったariamsu:Nakami@647e05
arimasuのnakami:中身