我想从java中的基类访问派生类的字段,而不知道字段的名称。 出于什么目的? 我想有一个“表”类来管理数据库表,如INSERT,UPDATE。 我是一个只有字段和值的派生类,在基类中我读取了字段和值,并创建了正确的INSERT或UPDATE命令。
我可以用C#这样做:
for (int count = 0; count < finfo.Length; count++)
{
value = finfo[count].GetValue(this);
name = finfo[count].Name;
}
我可以读取字段名称并在java中输入:
for (Field f : getClass().getDeclaredFields()){
name = f.getName();
}
但我不知道如何阅读该字段的VALUE!
我在许多论坛中以不同的方式提出这个问题,但我没有得到答案! 请帮我。 提前谢谢。
答案 0 :(得分:5)
给定Field f
,您可以使用f.get(object)
for (Field f : getClass().getDeclaredFields()){
name = f.getName();
value = f.get(this);
}
get
返回Object
- 如果该字段属于基本类型(boolean
,char
,int
等),则相应的包装器(将返回Boolean
,Character
,Integer
,...)(或者您可以使用特定于类型的getBoolean
,getChar
等方法直接返回原始类型)。 get
方法可以抛出各种异常(有些已检查,有些未经检查),您必须正确处理这些异常,有关详细信息,请参阅JavaDoc。
但是要退回到您的具体问题,如果您的目标是将类映射到数据库表,那么有成熟的,经过良好测试的框架可以为您完成所有艰苦工作,例如Hibernate或一个在JPA的许多实现中,我强烈建议您在尝试自己编写之前先查看其中的一个或多个。
答案 1 :(得分:0)
在你的基类中,它将被声明为abstract,你可以声明一个将获得值的抽象方法
public abstract BaseClass{
protected abstract FieldInfo getFieldInfo(i);
public void doSomething(){
for (int count = 0; count < finfo.Length; count++)
{
FieldInfo finfo = getFieldInfo(count);
value = finfo.GetValue(this);
name = finfo.Name;
}
}
}
在您的InheritedClass中,您必须实现它。