java 关于反射机制的问题

现在问题是这样的,一切问题都是相对于实体类的,比如有person-->teacher()-->math-teacher我用的getDeclarefield能获得属性值但是... 现在问题是这样的,一切问题都是相对于实体类的,比如有person-->teacher()-->math-teacher 我用的getDeclarefield能获得属性值 但是父类的属性无法获取,getSupperClass能获得最贴近的一个父类,现在问题如果有层继承,怎么获得所有属性,比如这个问题怎么获得math-teacher的所有属性
怕大家难以理解
我们会经常用到java 实体类 插入数据库的操作 ,我们知道重复写sql很麻烦 都要重复写属性字段,现在我用java的反射机制来实现,每一个实体类都有get和set方法,用getDelcaredField能这个获得所有实体类的所有属性,然后拼凑成sql语言。
现在我的问题是getDelcaredField只能获得实体类自身的属性 他的父类的属性无法获得,比如Person(name,sex),Teacher(school),Math_teacher(xxx) 我对Math_teacher这个类调用getDelcaredField,只能获得xxx的值,无法获得Teacher的属性值,
这个问题我也google过,但是上面只有获得最近一个父类的属性值(既是Teacher),如果有多层继承呢,如何获得Math_teacher的所有属性值既是(name,sex,school,xxx)。
展开
 我来答
百度网友e7886d4
2011-02-08 · TA获得超过1502个赞
知道小有建树答主
回答量:1195
采纳率:0%
帮助的人:288万
展开全部
java中有些方法定义中是允许抛出可能出现的异常的,你的这个class方法在
API中是这样定义的public static Class<?> forName(String className)
throws ClassNotFoundException他默认抛出的是找不到类异常。改正应该在这一句外面加上
try {
Class c = Class.forName("abc.UserBean");
}catch(Exception e){}
这样就不会错了。(Exception是一切异常类的父类)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
御用灌水师
2011-02-07 · TA获得超过1573个赞
知道小有建树答主
回答量:473
采纳率:0%
帮助的人:726万
展开全部
向上转型就行。

例如,你的math-teacher向上转型成teacher,获取属性,再转型成person,再获取属性

转型会吧
math-teacher mt = new math-teacher();

teacher t = (teacher)mt;

person p = (person)t;

然后你就随意获取属性吧

欢迎和我讨论讨论
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8b41f47ef
2011-02-10 · TA获得超过229个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:183万
展开全部
import java.util.Vector;
public class FillTest extends JFrame{

public static void main(String args[]){
Object somebody=new Math_teacher("一班","XX中学","王丽","女");
Vector<String> s=getFileds(somebody.getClass());
for(int i=0;i<s.size();i++){
System.out.println(i+":"+s.get(i));
}
}
private static Vector<String> getFileds(Class someClass){
Vector<String> names=new Vector<String>();
if(someClass.equals(Object.class)) return names;
Field f[]=someClass.getDeclaredFields();
for(int i=0;i<f.length;i++){
names.add(f[i].getName());
}
names.addAll(getFileds(someClass.getSuperclass()));
return names;
}
}
class Person{
String name;
String sex;
Person(String name,String sex){
this.name=name;
this.sex=sex;
}
}
class Teacher extends Person{
String school;
public Teacher(String school,String name,String sex){
super(name,sex);
this.school=school;
}
}
class Math_teacher extends Teacher{
String xxx;
public Math_teacher(String xxx,String school, String name, String sex) {
super(school, name, sex);
this.xxx=xxx;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daay1986
2011-02-21 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1474万
展开全部
class Parent {

public int one;
protected int two;
private int three;
public Rectangle[] rect;
public int[] a;
}

public class FieldD extends Parent {

public int four;
protected int five;
private int six;

static String getTypeName(Class type) {
if (type.isArray()) {
try {
Class cl = type;
int dimensions = 0;
while (cl.isArray()) {
dimensions++;
cl = cl.getComponentType();
}
StringBuffer sb = new StringBuffer();
sb.append(cl.getName());
for (int i = 0; i < dimensions; i++) {
sb.append("[]");
}
return sb.toString();
} catch (Throwable e) { /*FALLTHRU*/ }
}
return type.getName();
}

public static void main(String[] args) {
String value = "123" + "\n" + "123";
System.out.println(value);
Class c = FieldD.class;
System.out.println("The class " + c.getName() + " has the following fields: ");
System.out.println("");

Field[] fields = c.getFields();
String name, typeName, className, fieldName;
for (int i = 0; i < fields.length; i++) {
int mod = fields[i].getModifiers();
if (mod == 0) {
name = "";
} else {
name = Modifier.toString(mod);
}
typeName = getTypeName((fields[i].getType()));
className = getTypeName(fields[i].getDeclaringClass());
fieldName = fields[i].getName();
Rectangle rect = new Rectangle();
System.out.println(name + " " + typeName + " " + className + " " + fieldName);
}
}
}
只能发射public.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aooppo
2011-02-08 · TA获得超过1301个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:135万
展开全部
可能是因为父类的成员变量为私有变量,在运用反射时候需要在之前调用
java.lang.reflect.AccessibleObject这个类的如下方法

public void setAccessible(boolean flag)
让其值为true,才可以拿到私有变量,否则是操纵不了的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式