私はJava8を使用していますが、特定のタイプの例外がスローされたことを検証するテストヘルパーを作成しようとしています。私がやりたいのは何メソッドは引数には適用されません。例外タイプの消去に問題がありますか?
private static <E extends Exception> void expectThrow(Callable<Void> callable, Class<E> exceptionClass) {
try {
callable.call();
} catch (Exception e) {
assertTrue(exceptionClass.isInstance(e));
}
}
私は障害からより有用情報を得るようhamcrest照合とcatchブロックを置き換えるある:ここで働く最初のバージョンです
assertThat(e, Matchers.isA(exceptionClass));
が、これは」doesnのtコンパイル - 私はこの素敵なエラーを受け取ります:The method assertThat(T, Matcher<? super T>) in the type Assert is not applicable for the arguments (Exception, Matcher<E>)
これは困惑します。
Integer a = 3;
assertThat(a, Matchers.isA(Number.class));
多少いじった後、次のようにも動作します:
assertThat((E)e, Matchers.isA(exceptionClass));
それは私のEへの例外から役立つ」未チェックのキャストを提供しますが、これは完全に正常に動作し、以下の場合に類似と思われます"タイプセーフティ警告。私は知りませんcatch (E e)
- 型消去とすべて...
何が起こっているのですか?テストヘルパーを素早くタイプセーフな方法で更新するにはどうすればよいですか?
Daaaangを使用する必要がありますまでは...それはそれは長い間の周り立ち往生ちょっと面白いです! – Krease