Java 当类型信息不可用时,如何强制转换到私有内部类?
我的情况与以下类似:Java 当类型信息不可用时,如何强制转换到私有内部类?,java,class,reflection,private,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不是
// 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中),因为类型信息不可见。这是一个编译错误。情况非常严峻。我认为使用反射来实现这一点是可能的,但我恐怕没有太多使用这种特殊范式的经验。这有什么办法吗?我非常感谢社区提供的任何意见。也许你应该使用一个界面来代替?还是说这也是不可能的 我不知道以下内容是否是您所需要的,但也许这可以帮助您找到解决方法(因为您要求使用反射): 既然您有了B实例,您应该尝试:
Class<?> innerClass = o.getClass();
Class innerClass=o.getClass();
然后,如果可能的话,试着通过如下方式使用反射来获得所需:
Field allFields[] = innerClass.getDeclaredFields();
Constructor<?> constructors[] = innerClass.getDeclaredConstructors();
Method allMethods[] = innerClass.getDeclaredMethods();
constructor.setAccessible(true); sets the constructor accessible.
Field allFields[]=innerClass.getDeclaredFields();
构造函数[]=innerClass.getDeclaredConstructors();
方法allMethods[]=innerClass.getDeclaredMethods();
constructor.setAccessible(true);设置可访问的构造函数。
您可以自己实例化该实例,还是使用以某种方式返回的实例很重要?使用私有内部类的一点就是您不希望其他人使用它。你为什么要走这条路?现在的问题是什么?您是否希望在
B
实例上调用某些方法?您可以只使用toString()
,也可以使用反射通过B的实例调用B中的任意方法。这是正确的。我假设B实现了一些接口,因为您有对它的引用。您试图做什么使接口引用不足?强制转换到B实现的接口。在这种特殊情况下,我可以使用一个公共接口。因为一些我从未想过的原因。非常感谢。