当给了一个类的实例时,它可以去使用映射去配置这个类字段的值.如果在正常的情况下不可用时,这将会为我们完成工作.如下:
import java.lang.reflect.Field;
import java.util.Arrays;
import static java.lang.System.out;
enum Tweedle {DEE,DUM}
public class Book {
public long chapters = 0;
public String[] characters = {"Alice", "White Rabbit"};
public Tweedle twin = Tweedle.DEE;
public static void main(String... args) {
Book book = new Book();
String fmt = "%6s: %-12s = %s%n";
try {
Class<?> c = book.getClass();
Field chap = c.getDeclaredField("chapters");
out.format(fmt, "before", "chapters",book.chapters);
chap.setLong(book,12);
out.format(fmt,"after","chapters",chap.getLong(book));
Field chars = c.getDeclaredField("characters");
out.format(fmt,"before","characters",Arrays.asList(book.characters));
String[] newChars = {"Queen","King"};
chars.set(book,newChars);
out.format(fmt,"after","characters",Arrays.asList(book.characters));
Field t = c.getDeclaredField("twin");
out.format(fmt,"before","twin",book.twin);
t.set(book,Tweedle.DUM);
out.format(fmt,"after","twin",t.get(book));
} catch(NoSuchFieldException x) {
x.printStackTrace();
} catch(IllegalAccessException x) {
x.printStackTrace();
}
}
}