例如,给出一个这样的类:
public abstract class AbstractSomething {
public static volatile SingularAttribute<Somefield, AnotherField> myAttribute;
}
如何通过反射获取myAttribute
的实例。 AbstractSomething
没有实现类。
修改
不,我们需要SingularAttribute<T, S>
的实例。我们需要使用反射的原因是这些类被生成并作为Class
对象传递给我们的方法。我们无法知道我们收到的AbstractSomething
。其中有不少。
编辑2
找出问题所在。当应用程序中存在Hibernate上下文时,抽象类上的接口在访问它们时将替换为它们的实现对应物。
答案 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;