2016-06-23 9 views
5

私は次のコードで警告を得ている理由を私は理解していない:生タイプjava.lang.Class未確認の警告が表示されるのはなぜですか?

のメンバーとしてisAssignableFrom(Class<?>)

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isAssignableFrom(o.getClass()); 
} 

未確認コール私はisInstanceを使用する場合(私が理解しているのと同じ結果が得られます)、私は警告を受け取りません:

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isInstance(o); 
} 

答えて

2

Classは汎用タイプであり、Objectがクラスのインスタンスである必要があることをJavaに伝えていないためです。

public static <C> boolean isAssignableFrom(Class<C> clazz, C o) 
+0

のおかげのようなものに

public static boolean isAssignableFrom(Class clazz, Object o) 

を変更します!答えはそれを明らかにした。しかし、私は実行時に任意のオブジェクトでチェックできるように型パラメータを使用するのではなく、 'Object o'をそのまま残しておくほうがよいでしょうか? – Revolutionair

+0

実際には、タイプ消去後、コードは実行時に同じです(私の例では暗黙のキャストがあります)。 –

+0

「Parent」、「Child extends Parent」、「RandomClass」の3つのクラスがあるとします。型パラメータを使用すると、子が親から割り当て可能かどうかを確認できますが、RandomClass( 'isAssignableFrom(Parent.class、new RandomClass());)のためにそれを行うことはできません。 – Revolutionair

関連する問題