我正在使用此代码获取与Object关联的所有字段。有问题的对象有三个超类,其他类从这个对象扩展。
for (Field f : this.getClass().getFields()){
try{
fieldName = f.getName();
fieldType = f.getType().toString();
//Do more stuf
}
我不想获得与超类相关联的字段,但我希望当前类中的所有字段以及可能从中扩展的所有字段。
如何过滤掉我需要的字段?
答案 0 :(得分:5)
我不想获得与超类相关联的字段,但我希望当前类中的所有字段以及可能从其扩展的所有字段。
你不能得到“所有那些可能延伸的东西” - 但是如果你使用Class.getDeclaredFields()
而不是getFields()
那么你只会获得在该类中声明的字段。
答案 1 :(得分:3)
对于每个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
或{{1}},则根本不会显示任何字段。