package lecture.etc;

import java.lang.reflect.Field;
import jp.avaj.lib.debug.L;

/** リフレクション - フィールド値の取得・設定 Java */
class SetGetFieldValue {
  public static void main(String[] args) {
    MyClass obj = new MyClass();
    Class<?> myClass = MyClass.class;
    //
    try {
      // privateは値を設定できない
      L.p("-- privateフィールドの値の設定・取得");
      Field f0 = myClass.getDeclaredField("int0");
      f0.setInt(obj, 5);
      L.p(f0.getInt(obj));
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
    //
    try {
      L.p("-- protectedフィールドの値の設定・取得");
      Field f0 = myClass.getDeclaredField("int2");
      f0.setInt(obj, 5);
      L.p(f0.getInt(obj));
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
    //
    try {
      L.p("-- publicフィールドの値の設定・取得");
      Field f0 = myClass.getDeclaredField("int1");
      f0.setInt(obj, 5);
      L.p(f0.getInt(obj));
      L.p("-- 不正な値を設定してみる");
      f0.set(obj, "abc");
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }
  static class MyClass {
    private   int int0;
    public    int int1;
    protected int int2;
  }

}
//---------------------------------------------------
//・目次 Javaエトセトラ
//  http://blogs.yahoo.co.jp/artery2020/40576157.html
//・目次 - Java入門
//  http://blogs.yahoo.co.jp/artery2020/39975776.html
//・目次 - ビジネスパーソンの常識と非常識
//  http://blogs.yahoo.co.jp/artery2020/39728331.html
//・目次 - 論理・発想・思考についての考察と鍛え方
//  http://blogs.yahoo.co.jp/artery2020/39657784.html
//---------------------------------------------------