93

オブジェクトが のクラスまたはサブクラスのoインスタンスであるかどうかを確認したい。CC

たとえば、がになりたいpクラスであり、になりたい場合です。Pointx.instanceOf(Point.class)truex.instanceOf(Object.class)true

ボックス化されたプリミティブ型でも機能するようにします。たとえば、 if xis はIntegerthenx.instanceOf(Integer.class)である必要がありますtrue

そのようなことはありますか?そうでない場合、どうすればそのようなメソッドを実装できますか?

4

8 に答える 8

182

Class.isInstanceはあなたが望むことをします。

if (Point.class.isInstance(someObj)){
    ...
}

instanceofもちろん、代わりに使用できる場合は使用すべきではありませんが、リフレクションのシナリオではしばしば便利です。

于 2009-06-04T09:05:59.967 に答える
21

オブジェクト o がクラス c のインスタンスか、c のサブクラスのインスタンスかを確認したいと考えています。たとえば、 p が Point クラスの場合、 x.instanceOf(Point.class) が必要です

ええと... 何?o、p、x とは何ですか?

プリミティブ型でも動作するようにしたい。たとえば、x が整数の場合、x.instanceOf(Integer.class) と x.instanceOf(Object.class) は true になります。

いいえ、コンパイルするべきではありません。プリミティブはオブジェクトではないため、それらのメソッドを呼び出すことはできません。

とにかく、3 つのことがあり、そのうちの 1 つは間違いなくあなたが望むものを達成することができます (正確に適用される場所が多少異なります:

  • instanceofコンパイル時にクラスがわかっている場合は、演算子。
  • コンパイル時に不明なクラスに対してオブジェクトのクラスをチェックする場合は、Class.isInstance() 。
  • Class.isAssignableFrom()は、2 つのクラス オブジェクトの割り当て可能性を確認する場合に使用します。
于 2009-06-04T09:03:56.913 に答える
9
x instanceof Integer
x instanceof Object

正しい構文を使用するだけです

プリミティブ型の場合は、まったく別の方法で行う必要があります。それらのメソッドを作成することはできないため、メソッドを保持するクラスが必要です。したがって、「x.instanceOf(Integer.Class)」の代わりに、「MyClassComparer.instanceOf(x, Integer.Class)」などを呼び出す必要があります。これは、メソッドをオーバーロードすることで簡単に実装できますが、その機能が望ましい場合はまったく見当たりません。

于 2009-06-04T08:56:44.290 に答える
4

実際、Java には、オブジェクトがクラスのインスタンス、サブクラスのインスタンス、または特定のインターフェイスを実装するクラスのインスタンスであるかどうかを判断するために使用できる instanceof と呼ばれるブール演算子があります。

if(obj instanceof SomeClass) {
    // Do something
}

Java チュートリアルには、この演算子の良い例があります

于 2009-06-04T08:58:01.807 に答える
0

できるよ:

if (foo instanceof classNameYouWantToCheck) 
于 2009-06-04T08:57:15.520 に答える
0

「プリミティブ型でも機能するようにしたい。たとえば、x が整数の場合、x.instanceOf(Integer.class) と x.instanceOf(Object.class) は true にする必要があります。」

なんで?プリミティブ型と参照型は完全に分離されています。プリミティブ int は、Integer や Object のサブタイプではありません。プリミティブ値の型は、コンパイル時に常に静的に認識されるため、その型をテストしても意味がありません。確かに、プリミティブ値をボックス化して、その型をテストできます。

(Integer)5 instanceof Integer

しかし、ポイントは何でしょうか?

于 2009-06-04T17:00:56.570 に答える
-2

生オブジェクトと汎用オブジェクトの instanceof について混乱していると思います

obj instanceof Class
obj instanceof Class<?> // this is the one you want
于 2013-12-04T00:06:55.583 に答える