PropertyDescriptor[] pds = info.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if (!"class".equals(pd.getName())) {
Method m = pd.getWriteMethod();
m.invoke(user, "admin");
}
}
pd.getName():獲取 JavaBean 屬性名稱 (如 "username", "password", "class")。"class".equals(pd.getName()):安全比較,判斷屬性名是否為 "class"。將常量放左邊避免 pd.getName() 為 null 時拋 NPE。!:邏輯非運算符,取反。Introspector.getBeanInfo() 會返回所有屬性描述符,包含繼承自 Object 的 `getClass()` 方法對應的 "class" 屬性。該屬性:
getClass()),沒有 setter。pd.getWriteMethod() 返回 null。m.invoke(...) 會拋 NullPointerException。for (PropertyDescriptor pd : pds) {
Method writer = pd.getWriteMethod();
if (writer != null && !"class".equals(pd.getName())) {
try {
writer.invoke(user, "admin");
} catch (Exception e) {
log.warn("設置屬性失敗: " + pd.getName(), e);
}
}
}
writer != null,更通用地過濾無寫入器屬性。| 方法 | 說明 |
|---|---|
| getName() | 屬性名 (首字母小寫) |
| getReadMethod() | getter Method 對象 |
| getWriteMethod() | setter Method 對象 |
| getPropertyType() | 屬性類型 Class 對象 |
!"class".equals(pd.getName()) 是 Java 內省編程中過濾 Object 繼承屬性的慣用寫法,配合 getWriteMethod() != null 可構建健壯的屬性批量賦值工具。