Java by API/java.lang.reflect/AccessibleObject

Материал из Java эксперт
Перейти к: навигация, поиск

AccessibleObject: setAccessible(boolean flag)

   <source lang="java">

/* Before: [a=21.25, b=54.5, c=5665, d=2043, e=3121, f=1019] After: [a=21.25, b=54.5, c=0, d=0, e=0, f=0]

  • /

/*

*
* This software is granted under the terms of the Common Public License,
* CPL, which may be found at the following URL:
* http://www-124.ibm.ru/developerworks/oss/CPLv1.0.htm
*
* Copyright(c) 2003-2005 by the authors indicated in the @author tags.
* All Rights are Reserved by the various authors.
*
                    1. DO NOT EDIT ABOVE THIS LINE ########## */

import java.lang.reflect.Field; /**

* Demonstrates how to set public field objects.
*
* @author 
* @version $Revision: 1.3 $
*/

public class HiddenFieldModification {

 /** 
  * Sets all int fields in an object to 0.
  *
  * @param obj The object to operate on.
  *
  * @throws RuntimeException If there is a reflection problem.
  */
 public static void initIntFields(final Object obj) {
   try {
     Field[] fields = obj.getClass()
                       .getDeclaredFields();
     for (int idx = 0; idx < fields.length; idx++) {
       if (fields[idx].getType() == int.class) {
         fields[idx].setAccessible(true);
         fields[idx].setInt(obj, 0);
       }
     }
   } catch (final IllegalAccessException ex) {
     throw new RuntimeException(ex);
   }
 }
 /** 
  * Demo Method.
  *
  * @param args Command line arguments.
  */
 public static final void main(final String[] args) {
   SomeNumbers value = new SomeNumbers();
   System.out.println("Before: " + value);
   initIntFields(value);
   System.out.println("After: " + value);
 }

} class SomeNumbers {

 /** A demo double. */
 public double a = 21.25d;
 /** A demo float. */
 public float b = 54.5f;
 /** A Demo int */
 public int c = 5665;
 /** Another demo int. */
 public int d = 2043;
 /** Another demo int. */
 protected int e = 3121;
 /** Another demo int. */
 private int f = 1019;
 /** 
  * @see java.lang.Object#toString()
  */
 public String toString() {
   return new String("[a=" + a + ", b=" + b + ", c=" + c + ", d=" + d + ", e=" + e
                     + ", f=" + f + "]");
 }

}


      </source>