如何转换为私有内部类时,类型信息不可用?(How to cast to a private inne

2019-09-27 23:47发布

我有类似以下的情况:

// 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中,例如),因为类型的信息是不可见的。 这是一个编译错误。 这种情况是非常严格的。 我认为有可能实现这一目标使用反射,但我恐怕我没有使用特定的范例很多的经验。 有没有办法解决? 我明白任何输入社区会提供。

Answer 1:

也许有你应该代替accesing的接口? 或者是inaccesible呢?

我不知道下面是你需要什么,但也许这可以帮助你找到一个解决方法(既然你问了反思的用途):

因为你不知何故有你的乙例如,你应该尝试:

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

然后,如果可能的话,尽量让你需要使用反射像这样:

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

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

你可以实例自己的实例,或者是它重要的是使用某种方式返回的一个?



文章来源: How to cast to a private inner class when type information is unavailable?