[求助] - 子类调用父类方法,通过反射获取父类属性,菜鸟烈日跪求.

pk1 2014-06-28 05:39:22
父类中有如下代码:

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) ,就出现了空指针.

此外,当然有其他方法可以实现该功能,我只是想通过反射获取,这样可以不用关心属性个数.
谢谢各位了.
...全文
442 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pk1 2014-06-30
  • 打赏
  • 举报
回复
引用 3 楼 u012954898 的回复:
我根据你的意思大概模拟了一下 不知道是不是你想要的 没有空指针 但是这样只能得到父类的属性 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); } }
你是正确的,我忘记判断非空了,所以得出的是NULL,非常感谢.
双龙寇仲 2014-06-30
  • 打赏
  • 举报
回复
getDeclaredFields()是获取自身类的属性,getFields()会把继承的属性一起获取,看情况用
  • 打赏
  • 举报
回复
我根据你的意思大概模拟了一下 不知道是不是你想要的 没有空指针
但是这样只能得到父类的属性
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);
}

}
pk1 2014-06-28
  • 打赏
  • 举报
回复
引用 1 楼 u012002376 的回复:
把所有代码都帖出来吧,
其他的有些代码是关于Java web的,我感觉不影响我以上要表达的意思.简单点比较好
满无解 2014-06-28
  • 打赏
  • 举报
回复
把所有代码都帖出来吧,

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧