在Java中,可以使用对象的实例及其类类型获取对象的“父”类吗?
假设我们有这两种类类型和注释类型:
public class Foo{
}
public class Bar{
@TestAnnotation
public Foo mFoo = new Foo();
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation{
}我希望使用Field实例获取mFoo的mFoo对象,否则使用null,然后使用TestAnnotation test = field.TestAnnotation(SQLiteID.class);获得注释。
我想要的最终结果是知道Foo的实例是否是包含特定注释的另一种类型的一部分。
这似乎很牵强,所以我不认为这是可能的。
发布于 2013-10-12 04:29:24
一般来说,这是不可能的/不可行的。
同一个对象实例可以有多个名称--也就是说,同一个对象可以同时分配给许多不同的静态字段、实例字段、参数、局部变量(等等)。
所有的“解决方案”都涉及对所有这些变量的某种形式的迭代,这是很少可行的,应该避免这样的一般设计。即使减少了域(例如注释),也仍然存在一个类似的问题--即如何查找所述域的所有此类根(具有特定注释的成员的对象实例)?
发布于 2013-10-12 04:21:50
我希望使用Foo实例获取mFoo的字段对象。
这是倒行逆施,不可能。
您可以通过测试Field of Bar的类型来获得它,然后尝试检索特定的注释。
Field[] fields = Bar.class.getDeclaredFields();
for (Field field : fields) {
if (Foo.class.isAssignableFrom(field.getType())) {
TestAnnotation testAnnotation = field.getAnnotation(TestAnnotation.class);
System.out.println(testAnnotation); // might be null, if annotation doesn't exist
}
}现在,如果您有一个Foo实例,也可以将它与Bar实例的字段值进行比较。
发布于 2013-10-12 06:29:30
这在Java中是不可能的。这是可能的编写JVM代理,但可能会有一个严重的性能损失,因为所有的簿记。
https://stackoverflow.com/questions/19330491
复制相似问题