从抽象类中获取字段实例

时间:2014-09-25 14:41:15

标签: java reflection

例如,给出一个这样的类:

public abstract class AbstractSomething {

    public static volatile SingularAttribute<Somefield, AnotherField> myAttribute;
}

如何通过反射获取myAttribute的实例。 AbstractSomething没有实现类。


修改

不,我们需要SingularAttribute<T, S>的实例。我们需要使用反射的原因是这些类被生成并作为Class对象传递给我们的方法。我们无法知道我们收到的AbstractSomething。其中有不少。


编辑2

找出问题所在。当应用程序中存在Hibernate上下文时,抽象类上的接口在访问它们时将替换为它们的实现对应物。

2 个答案:

答案 0 :(得分:1)

实际上没什么大不了的,你可以这样做:

Field field = AbstractSomething.class.getField("myAttribute")

然后您可以通过调用field.get(null)field.set(null, value)

来访问它

真正的问题是你为什么要使用反射,但我想你有理由。

修改

如果您手头有一个Class实例(我们称之为classInstance),那么您可以

Field field = classInstance.getField("myAttribute")

获取用于修复您要查找的字段的字段...并且如果您希望所有字段都调用getFields方法。

为了访问静态字段,您并不需要具体实现,也不需要有问题的类的实例。

答案 1 :(得分:0)

无需反思。该字段属于,无论有多少个子类,AbstractSomething类只有一个实例,所以只需:

SingularAttribute<Somefield, AnotherField> attr = AbstractSomething.myAttribute;