例外とか投げて貰ってもねぇ…
java.lang.Class#cast
public T cast(Object obj) { if (obj != null && !isInstance(obj)) throw new ClassCastException(); return (T) obj; }
こんなん書いてみた。
public static <T> T as(Class<T> clazz, Object obj) { if (obj != null && clazz.isInstance(obj)) { return (T) obj; } return null; }
isInstanceに、null渡しちゃダメなんだろうか。
nativeメソッドになっているから、実装がどうなってるかわからんのだけども。
windows版のバイナリだとnull渡しても特に問題無くfalseが返ってきたりしてる。
追記。
The method returns true if the specified Object argument is non-null and can be cast to the reference type represented by this Class object without raising a ClassCastException. It returns false otherwise.
と書いてあるので、null渡してもイイぞ、ゴルァ。と突っ込みが入りました。
確かに、これならnull渡してもいい感じ。
で、Class#castでnullチェックしてるのは、nativeメソッドの呼出しを避けられるケースを作る事でパフォーマンスの劣化を防いでいるのでは?との事。