Java by API/java.lang.reflect/AccessibleObject
Версия от 17:43, 31 мая 2010; (обсуждение)
AccessibleObject: setAccessible(boolean flag)
/*
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.
*
########## 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 + "]");
}
}