如何从java中的基类访问派生类的字段值?

0 java reflection inheritance

我想从java的基类访问派生类的字段,而不知道字段的名称.出于什么目的?我想有一个"表"类来管理数据库表,如INSERT,UPDATE.我是一个只有字段和值的派生类,在基类中我读取了字段和值,并创建了正确的INSERT或UPDATE命令.

我可以用C#这样做:

for (int count = 0; count < finfo.Length; count++)
{
    value = finfo[count].GetValue(this);
    name = finfo[count].Name;
}
Run Code Online (Sandbox Code Playgroud)

我可以读取字段名称并在java中输入如下:

for (Field f : getClass().getDeclaredFields()){
    name = f.getName();
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何阅读该领域的价值!

我在许多论坛上以不同的方式提出这个问题,但我没有得到答案!请帮我.提前致谢.

Ian*_*rts 5

给定a,Field f您可以使用读取特定对象中该字段的值f.get(object)

for (Field f : getClass().getDeclaredFields()){
    name = f.getName();
    value = f.get(this);
}
Run Code Online (Sandbox Code Playgroud)

get返回Object-如果字段是一个基本类型(boolean,char,int等),那么相应的包装器(Boolean,Character,Integer,...)将返回(或者你可以使用类型特定的getBoolean,getChar等方法来返回原始直接输入).该get方法可以抛出各种异常(一些已检查,一些未经检查),您必须妥善处理,有关详细信息,请参阅JavaDoc.

但是要退出你的具体问题,如果你的目标是将类映射到数据库表,那么有成熟的,经过良好测试的框架可以为你完成所有艰苦的工作,例如Hibernate或JPA的许多实现之一,我强烈建议你在尝试自己动手之前先研究其中的一个或多个.