当前位置: 代码迷 >> J2SE >> [] - 子类调用父类方法,通过反射获取父类属性,初学者烈日跪求
  详细解决方案

[] - 子类调用父类方法,通过反射获取父类属性,初学者烈日跪求

热度:25   发布时间:2016-04-23 20:35:32.0
[求助] - 子类调用父类方法,通过反射获取父类属性,菜鸟烈日跪求.
父类中有如下代码:

public String getKeyToValue() {
// reflection to get all the attributes
Field[] fields = this.getClass().getDeclaredFields();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fields.length; i++) {
Field f = fields[i];
try {
String value = f.get(this).toString().trim();
if (null != f && !value.equals("")) {
sb.append(" ").append(f.getName()).append("=\"").append(
value).append("\"");
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}


我想在子类中,调用该方法获取如下格式的属性:
key="value"  key2="value2" 的格式串.

但现在的问题是,在子类中调用该方法时候, this.getClass() 获得的是子类的Class对象,再调用getDeclaredFields()
方法,拿不到父类的属性.

如果使用 this.getClass().getSupperClass()可以获得父类的Class对象,也可以获取到父类声明的属性.
但是 获取该对象的值的时候f.get(this) ,就出现了空指针.  

此外,当然有其他方法可以实现该功能,我只是想通过反射获取,这样可以不用关心属性个数.
谢谢各位了.
------解决方案--------------------
把所有代码都帖出来吧,
------解决方案--------------------
我根据你的意思大概模拟了一下 不知道是不是你想要的 没有空指针
但是这样只能得到父类的属性
class Father {

String s = "afa";

int i = 10;

public String getKeyToValue() { // reflection to get all the attributes
Class c = this.getClass().getSuperclass();
Field[] fields = c.getDeclaredFields();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fields.length; i++) {
Field f = fields[i];
try {
String value = f.get(this).toString().trim();
if (null != f && !value.equals("")) {
sb.append(" ").append(f.getName()).append("=\"")
.append(value).append("\"");
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}


}

public class Child extends Father{

String s = "safsfsfs";

public static void main(String[] args) {
String s = new Child().getKeyToValue();
System.out.println("ada");
System.out.println(s);
}

}
------解决方案--------------------
getDeclaredFields()是获取自身类的属性,getFields()会把继承的属性一起获取,看情况用
  相关解决方案