- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为 List<WebElement>
使用装饰器模式.此装饰的一部分需要使用代理。
当我调用 get(index)
如果索引超出范围,它会抛出 IndexOutOfBounds
异常,然后被代理捕获,并用 UndeclaredThrowableException
包装.
我的理解是,它应该仅在检查异常时执行此操作。 IndexOutOfBounds
是一个未经检查的异常,那么为什么它会被包裹起来呢?
即使我添加 throws IndexOutOfBounds
,它仍然会被包裹起来到我的invoke
功能。
这是我的代码:
@SuppressWarnings("unchecked")
public WebElementList findWebElementList(final By by){
return new WebElementList(
(List<WebElement>) Proxy.newProxyInstance(this.getClass().getClassLoader(),
new Class<?>[] { List.class }, new InvocationHandler() {
// Lazy initialized instance of WebElement
private List<WebElement> webElements;
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (webElements == null) {
webElements = findElements(by);
}
return method.invoke(webElements, args);
}
}), driver);
}
这是我的堆栈跟踪的一部分:
java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy30.get(Unknown Source)
at org.lds.ldsp.enhancements.WebElementList.get(WebElementList.java:29)
...
Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
... 41 more
最佳答案
Vic Jang 是对的。您需要将调用包装在 try-catch 中并重新抛出内部异常。
try {
return method.invoke(webElements, args);
} catch (InvocationTargetException ite) {
throw ite.getCause();
}
原因是“Method.invoke”将那些在方法代码中抛出的异常包装在 InvocationTargetException 中。
java.lang.reflect.方法:
Throws:
...
InvocationTargetException - if the underlying method throws an exception.
java.lang.reflect.InvocationTargetException:
InvocationTargetException is a checked exception that wraps an exception thrown by an invoked method or constructor.
代理对象的类没有在其“抛出”中声明 InvocationTargetException。这会导致 UndeclaredThrowableException。
关于java - IndexOutOfBoundsException 抛出的 UndeclaredThrowableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690653/
背景 在rpc接口调用场景或者使用动态代理的场景中,偶尔会出现undeclaredthrowableexception,又或者在使用反射的场景中,出现invocationtargetexcepti
我正在为 List 使用装饰器模式.此装饰的一部分需要使用代理。 当我调用 get(index)如果索引超出范围,它会抛出 IndexOutOfBounds异常,然后被代理捕获,并用 Undeclar
我有以下代码 public Object handlePermission(ProceedingJoinPoint joinPoint, RequirePermission permission) t
在运行时此代码有效: // Service class class UserService { ApiClient api User create(User user) throws
基于这篇文章How should I handle "No internet connection" with Retrofit on Android 我做了一个自定义的ErrorHandler pr
在一个 bean 中,我尝试使用此方法列出所有文章 public List listerLesArticles() { javax.persistence.Query req = manage
当我输入错误的 SQL 驱动程序名称或数据库服务器脱机时,我会收到以下异常,基本上是任何 SQLException。 我无法确定 UndeclaredThrowableException 来自何处。
这是我希望通过的单元测试: import static org.junit.Assert.assertEquals; import org.jmock.Expectations; import org
我有一个在 Kotlin 中将字符串转换为日期的 extension 方法。 fun String.convertToDate() : Date { var pattern: String = "
在我的代码中这一行 DataFeed dataFeed = analyticsService.getFeed(query.getUrl(),DataFeed.class); 抛出 java.la
我尝试获取 CloudWatch 指标,但出现以下错误: Exception in thread "main" java.lang.reflect.UndeclaredThrowableExcepti
我在 HIVE 中有以下查询,但它不起作用 SELECT newcust.dt , aspen.Probe , newcust.direction , aspen.VLan , sum(newcust
在我的本地机器上一切正常。但是,一旦我在 Linux 机器 (CentOS) 上获取它,生成报告时就会出现以下错误: java.lang.reflect.UndeclaredThrowableExce
为改造编写了自定义错误处理。当 minifyEnabled false 时,代码可以完美运行。当我启用 proguard 时,出现以下异常 12-17 10:14:07.688 18568-1904
我的插件中有一个功能,可以将一些 list 项目导出到 Excel 文件中。之前,一切工作正常,但从几天前开始,我在尝试打开 Excel 工作簿时遇到 $Proxy10.Open() 错误。我不知道这
我是一名优秀的程序员,十分优秀!