簡體   English   中英

java反射僅獲取所有用戶創建的類變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM