我的情况类似于以下情况:
// 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中),因为类型信息不可见。这是一个编译错误。情况非常严格。我认为可能有可能通过反射实现这一点,但我担心我没有很多使用该特定范例的经验。有没有办法解决?我感谢社区提供的任何意见。
答案 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.
您可以自己实例化该实例,还是使用以某种方式返回的实例很重要?