使用反射查找私有内部类

时间:2016-08-11 12:22:26

标签: java android reflection

在android.accounts.AccountManager:

的上下文中
public class AccountManager {

    private abstract class AmsTask extends FutureTask<Bundle> implements AccountManagerFuture<Bundle> {
    ...
    }

}

我想使用反射按名称查找内部类,因为我需要一个Class对象来确定成员方法的静态性。在简单的情况下

public class AccountManager {

    public class Foo {
    ...
    }

}

可以使用Class.forName("android.accounts.AccountManager$Foo")完成此操作。但是,private修饰符消除了这种可能性。我尝试搜索Class.forName("android.accounts.AccountManager").getDeclaredClasses(),但它返回一个空列表。它的specification涵盖了private个成员类,所以我不知道为什么它不会被getter返回。 我认为它与abstract有关。

编辑:实验显示getDeclaredClasses()可以使用以下代码段,但不适用于实际的Android类。

public class Test {

    private abstract class AmsTask extends LinkedList implements TestInterface {
    ...
    }

    private interface TestInterface{}

}

使用AccountManager的类加载器的建议可能会有所帮助,但结果并不富有成效。

Class am = Class.forName("android.accounts.AccountManager");
Class.forName("android.accounts.AccountManager$AmsTask",false,am);

在后一次通话中导致ClassNotFoundException

0 个答案:

没有答案