6

次に例を示します。

public boolean check(Class<?> clazz, Object o)
{
    return clazz.isInstance(o);
}

check(int.class, 7); // returns false

isInstanceは を受け入れるため、はプリミティブ型であり、 に自動ボックス化されるため、 ではObject機能しません。それでは、一般的なチェックメソッドを書くことはまったく可能ですか? または、 clazz のタイプが であることを確認する必要がありますか?intintIntegerClass<? extends Object>

4

2 に答える 2

3

intJavaにはクラスがありません。そのIntegerクラス。7に変換されInteger.valueOf(7)、JLS に従ってint.classに変換されます。Integer.class

pがプリミティブ型の名前である場合、ボックス化変換後Bの型の式の型とします。pの型はp.classですClass<B>

Integerはクラス オブジェクトなので、whileintはプリミティブ型です。したがって、オブジェクトを操作するClassなどisInstanceのほとんどのメソッドは、 のコンテキストでは無効であるため、その矛盾が見られます。isAssignableFromint.class

check(Integer.class, 7);

期待される結果が得られるはずです。

于 2013-04-28T17:25:06.417 に答える