0

我想在不知道字段名称的情况下从 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();
}

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

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

4

2 回答 2

5

给定 aField 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 的众多实现之一,我强烈建议您在尝试推出自己的产品之前先研究其中的一个或多个。

于 2013-10-03T09:47:47.757 回答
0

在将被声明为抽象的基类中,您可以声明一个抽象方法来获取值

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 中,您必须实现它。

于 2013-10-03T09:48:47.817 回答