[英]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
並且只需要用C
, D
或E
聲明的字段,則可以說
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
你會得到的公共領域C
和D
,如果this
是A
或B
你會得到任何領域都。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.