当类型信息不可用时如何转换为私有内部类?

时间:2013-11-27 00:53:54

标签: java class reflection private

我的情况类似于以下情况:

// In some library code
public class A
{
    private class B
    {
        Object value;
    }
}

// In my code
Object o;

// o is initialized to an instance of B somehow
// ...

B bInstance = (B) o;

如果B的类型无法访问,我如何将对象转换为B

要更详细地解释,A 不是我的代码库的一部分。它是图书馆的一部分。我可以访问一个我知道属于B类型的对象,但我无法转换它(例如在IDE中),因为类型信息不可见。这是一个编译错误。情况非常严格。我认为可能有可能通过反射实现这一点,但我担心我没有很多使用该特定范例的经验。有没有办法解决?我感谢社区提供的任何意见。

1 个答案:

答案 0 :(得分:0)

也许有一个你应该访问的界面呢?或者它也是不可能的?

我不知道以下是否是您所需要的,但也许这可以帮助您找到解决方法(因为您要求使用反射):

由于你以某种方式拥有你的B实例,你应该尝试:

Class<?> innerClass = o.getClass();

如果可能的话,尝试使用这样的反射来获得你需要的东西:

Field allFields[] = innerClass.getDeclaredFields();    
Constructor<?> constructors[] = innerClass.getDeclaredConstructors();
Method allMethods[] = innerClass.getDeclaredMethods();

constructor.setAccessible(true);  sets the constructor accessible.

您可以自己实例化该实例,还是使用以某种方式返回的实例很重要?