Java 8 では、タイプ AWTKeyStroke 以外のオブジェクトが keystrokes 引数に含まれている場合に、 java.awt.Component.setFocusTraversalKeys(int id, Set<? extends AWTKeyStroke> keystrokes) メソッドと java.awt.KeyboardFocusManager.setDefaultFocusTraversalKeys(int id, Set<? extends AWTKeyStroke> keystrokes)
メソッドによってスローされる実行時例外の振る舞いが変更されました。
Java 8 では、これらのメソッドは、このエラーの場合に IllegalArgumentException ではなく ClassCastException をスローします。
この規則により、setFocusTraversalKeys メソッドと
setDefaultFocusTraversalKeys メソッドの呼び出しが、IllegalArgumentException の catch 節を使用する try ステートメントによって囲まれている場合に、それらのメソッドの呼び出しにフラグを立てます。
以下の例では、フラグが立てられる setFocusTraversalKeys メソッドを示します。
public static void testSetFocusTraversal(コンポーネント comp, int id, Set keys) {
try { comp.setFocusTraversalKeys (id, keys);} catch (IllegalArgument例外 iae) {
...
} }
Java の資料に説明されているとおり、setFocusTraversalKeys メソッドと setDefaultFocusTraversalKeys メソッドは、他の理由で引き続き IllegalArgumentException をスローします。catch ブロック内のロジックを評価して、ClassCastException またはより一般的な実行時例外のタイプも処理する必要があるかどうかを判断します。
これらのクラスについて詳しくは、以下のリソースを参照してください。