import java.lang.reflect.Field; //导入方法依赖的package包/类
public static void setField(Object instance, Field field, Object value) throws IllegalAccessException {
if (value == null && field.getType().isPrimitive()) {
return;
}
if (UNSAFE != null) {
if (int.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putInt(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (int) value);
} else if (long.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putLong(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (long) value);
} else if (double.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putDouble(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (double) value);
} else if (void.class.equals(field.getType())) {
} else if (float.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putFloat(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (float) value);
} else if (byte.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putByte(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (byte) value);
} else if (char.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putChar(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (char) value);
} else if (boolean.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putBoolean(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (boolean) value);
} else if (short.class.equals(field.getType())) {
((sun.misc.Unsafe) UNSAFE).putShort(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), (short) value);
} else {
((sun.misc.Unsafe) UNSAFE).putObject(instance, ((sun.misc.Unsafe) UNSAFE).objectFieldOffset(field), value);
}
} else { //Fallback if unsafe isn't available
field.setAccessible(true);
if (int.class.equals(field.getType())) {
field.setInt(instance, (int) value);
} else if (long.class.equals(field.getType())) {
field.setLong(instance, (long) value);
} else if (double.class.equals(field.getType())) {
field.setDouble(instance, (double) value);
} else if (void.class.equals(field.getType())) {
} else if (float.class.equals(field.getType())) {
field.setFloat(instance, (float) value);
} else if (byte.class.equals(field.getType())) {
field.setByte(instance, (byte) value);
} else if (char.class.equals(field.getType())) {
field.setChar(instance, (char) value);
} else if (boolean.class.equals(field.getType())) {
field.setBoolean(instance, (boolean) value);
} else if (short.class.equals(field.getType())) {
field.setShort(instance, (short) value);
} else {
field.set(instance, value);
}
}
}