检索实例化变量的类

时间:2017-05-16 10:14:23

标签: java reflection java-8 annotations

在Java中是否可以接收一个声明了特定变量的类? 例如,请注意以下代码:

class SomeClass {
    private AnotherClass myVariable;
}

我想要做的是在AnotherClass中接收一个类SomeClass。但我找不到任何有关此事的信息。 如果不可能,请通知我。

2 个答案:

答案 0 :(得分:1)

我认为你不能直接访问这些信息,但有间接的方法。

  1. 如果你只是想要

      

    在AnotherClass中接收一个类SomeClass

    您可以将AnotherClass设为内部课程 - 因此可以访问外部课程信息。

  2. 您可以使用反射找到课程SomeClass: 迭代所有类并找到哪个类具有类AnotherClass的字段。

  3. 添加注释以在迭代所有类时直接检测SomeClass

答案 1 :(得分:0)

如评论中所示,您可以使用Field.getDeclaringClass()

但是看看这些课程:

class Master {
    private Object o;
}

class Sub extends Master {}

在这种情况下,Sub.class.getDeclaredField("o");会抛出java.lang.NoSuchFieldException: o,因为oMaster的成员。

所以你需要调用Master.class.getDeclaredField("o");(所以你已经需要知道声明类...)