私はデコレータ パターンを使用して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