[英]java reflections to get all user created class variables only
我正在嘗試使用反射創建一個函數,該函數檢查所有自定義的類變量,以查看它們是否具有基於模式“ [0-9a-zA-Z _] +”的有效值
我找到了一些代碼模板並適應了我的代碼,如下所示
UserClass uc = new UserClass();
Class clazz = uc.getClass();
for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
String name = field.getName();
Object value;
try {
value = field.get( uc );
System.out.printf("Field name: %s, Field value: %s%n", name, value);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我的UserClass看起來像
@Entity
public class UserClass implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String descr;
private String name;
@OneToMany(mappedBy="userClassId",fetch=FetchType.LAZY)
private List<packages> packagesList;
我可以正常獲取UserClass變量的名稱和值,但問題是它也需要一些我不關心的其他變量,例如pcInheritedFieldCount,pcFieldNames等
我的解決方案是檢查變量名稱是否在pc忽略的情況下開始,但是我想知道是否有正確/最佳的方法來只獲取我在類定義中聲明的變量。
如果您像這樣運行此應用程序-在主要方法中而不是在某些spring上下文中,它將按預期運行。 問題在於,在Web應用程序中運行時,這些JPA批注會在代碼之前得到處理。 這些“標記”所做的就是標記您的類,以便JPA實現可以為其添加行為。 該附加行為在運行時添加,然后在您通過反射進行類信息時,該信息已經存在。
對於變通方法,我建議您尋找getter方法,而不是遍歷字段。 如果這些是數據庫實體,並且您想過濾它們,我想它們將是標准的Java Bean,並且每個有意義的屬性都將具有getter。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.