反映方法时抛出TypeNotPresentException

时间:2015-02-05 22:22:09

标签: java android reflection

我有一个子类,它有一个在Android项目中抛出异常的方法。

public class Bar extends Foo {
    public void method(String someClass) throws ReflectiveOperationException {
        Class.forName(someClass);
    }
}

我有一个基类,其方法反映了自己的方法,当然,这些方法可以从子类中调用。

public class Foo {
    public void reflectOnMethods() {
        for (Method m : this.getClass().getDeclaredMethods()) {
           //do stuff with methods
        }
    }
}

当Bar调用其继承的reflectOnMethods时,我会看到像这样的堆栈跟踪

02-05 21:58:04.461: E/AndroidRuntime(2737): java.lang.TypeNotPresentException: Type java/lang/ReflectiveOperationException not present
02-05 21:58:04.461: E/AndroidRuntime(2737):     at java.lang.Class.getDeclaredMethods(Native Method)
02-05 21:58:04.461: E/AndroidRuntime(2737):     at java.lang.Class.getDeclaredMethods(Class.java:703)

当我将抛出的异常从ReflectiveOperationException更改为ClassNotFoundException 为什么这是FIX ?? !! 时,问题就消失了

我对此感到困惑,并会调查JDK来源以试图解决它,但我感觉很懒。

1 个答案:

答案 0 :(得分:1)

问题是您是否尝试在API&lt; 19上运行代码,但 <Page.actionBar> <Page.actionBar> <ActionBar> <ActionBar.actionItems> <ActionItem android.position="actionBar" icon="res://icon" ios.position="right" /> </ActionBar.actionItems> </ActionBar> </Page.actionBar> </Page.actionBar> ReflectiveOperationExceptionClassNotFoundExceptionIllegalAccessException的基类自API 19以来,InstantiationExceptionInvocationTargetExceptionNoSuchFieldException

如果要与API级别低于19的兼容性,请不要在throws子句中使用NoSuchMethodException

ReflectiveOperationException