Java でオブジェクトをキャストする方法は 2 つあります。
List<Object> l = new ArrayList();
ArrayList<Object> first = (ArrayList<Object>) l;
ArrayList<Object> second = ArrayList.class.cast(l);
どちらが優れているのか、その理由は?
より良い方法は、最も読みやすいです。型キャストを行うクラスがすでにわかっている場合は、 を使用します(ClassToUpcast) object
。クラスがわからないがオブジェクトClass<ClassToUpcast> clazz
がある場合は、 を使用しますclazz.cast(object)
。
ArrayList<Object> second = ArrayList.class.cast(l);
このリフレクション操作はリストの型パラメーターをチェックできないため、コンパイラの警告が表示されます。
ArrayList<Object> first = (ArrayList<Object>) l;
一方、List と ArrayList の型パラメーターが同じであること、したがってこれが安全な操作であることをコンパイラーが証明できる非リフレクション操作です。
したがって、どちらが優先されるかは明らかです。