簡體   English   中英

Java-從反射中排除超類字段

[英]Java - Exclude superclass fields from reflection

我正在使用此代碼來獲取與對象關聯的所有字段。 有問題的對象具有三個超類,其他類從該對象擴展。

for (Field f : this.getClass().getFields()){
    try{
        fieldName = f.getName();
        fieldType = f.getType().toString();
        //Do more stuf
    }

我不想獲取與超類關聯的字段,但是我希望當前類中的所有字段以及所有可能從其擴展的字段。

如何過濾我需要哪些字段?

我不想獲取與超類關聯的字段,但是我希望當前類中的所有字段以及所有可能從其擴展的字段。

您無法獲得“所有可能從其擴展的內容”-但是,如果使用Class.getDeclaredFields()而不是getFields()那么您將僅獲得在該類中聲明的字段。

對於每個Field您可以使用getDeclaringClass()確定聲明該字段的類,因此,如果您具有類似

A
|
B
|
C
|\
D E

並且只需要用CDE聲明的字段,則可以說

for (Field f : this.getClass().getFields()){
  if(C.class.isAssignableFrom(f.getDeclaringClass())) {
    // f was declared by C or one of its subclasses

如果this是一個實例C你會得到公正的公共領域C ,如果this是一個D你會得到的公共領域CD ,如果thisAB你會得到任何領域都。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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