使用代理對類的屬性賦值或者是抽象類私有類

 

public static void setFieldValue(final Object object, final String fieldName, final Object value) {
  Field field = getDeclaredField(object, fieldName);

  if (field == null) {
   throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");
  }

 if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {
   field.setAccessible(true);
 }

  try {
   field.set(object, value);
  } catch (IllegalAccessException e) {
   //TODO
  }
 }
 /**
  *
  */
 protected static Field getDeclaredField(final Object object, final String fieldName) {
  for (Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass
    .getSuperclass()) {
   try {
    return superClass.getDeclaredField(fieldName);
   } catch (NoSuchFieldException e) {
    // Field is not in this class,get super class
   }
  }
  return null;
 }

調用方法:    setFieldValue(dq,"reservedTickets",reservedTickets);

第一個參數類的實例,第二個參數要賦值的屬性名,第三個參數值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章