我得到一些奇怪的错误,我想了解会发生什么。
首先,我在Android中使用片段对象的反射。要做到这一点,我必须抓住反思异常。
此代码的工作原理:
try
{
return (String) MyFragment.class.getMethod("aStaticMethod", new Class[]{MyActivity.class} ).invoke(null, myActivity);
}
catch(NoSuchMethodException e)
{
return "fail";
}
catch(IllegalAccessException e)
{
return "fail";
}
catch(InvocationTargetException e)
{
return "fail";
}
但由于所有异常都是ReflectiveOperationException的子类,我只能创建一个异常处理程序。
此代码的工作原理:
try
{
return (String) MyFragment.class.getMethod("aStaticMethod", new Class[]{MyActivity.class} ).invoke(null, myActivity);
}
catch(ReflectiveOperationException e)
{
return "fail";
}
此代码在正常Java函数的一部分时有效。但是,当我尝试在匿名类中使用它时,事情变得棘手。
此代码无效:
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager())
{
@Override
public CharSequence getPageTitle(int i)
{
try
{
return (String) MyFragment.class.getMethod("aStaticMethod", new Class[]{MyActivity.class} ).invoke(null, myActivity);
}
catch(ReflectiveOperationException e)
{
return "fail";
}
}
});
它可以顺利编译,但是当应用程序到达该行时,我会收到VerifyError。
但是,如果我不使用ReflectiveOperationException并求助于具体类型,那么事情就会再次发挥作用!
此代码再次工作:
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager())
{
@Override
public CharSequence getPageTitle(int i)
{
try
{
return (String) MyFragment.class.getMethod("aStaticMethod", new Class[]{MyActivity.class} ).invoke(null, myActivity);
}
catch(NoSuchMethodException e)
{
return "fail";
}
catch(IllegalAccessException e)
{
return "fail";
}
catch(InvocationTargetException e)
{
return "fail";
}
}
});
我的问题:发生了什么事?是Java或Android中的某种错误还是我做了非法的事情?
答案 0 :(得分:0)
ReflectiveOperationException
,在API 19之前使用它会导致VerifyError
,因为该类不存在