/ /オブジェクトがJavaのクラスに属しているかどうかを調べる[duplicate] - java、ポリモーフィズム

オブジェクトがJavaのクラスに属しているかどうかを確認する[duplicate] - java、polymorphism

オブジェクトが特定のクラスに属していることを確認する簡単な方法はありますか?たとえば、

if(a.getClass() = (new MyClass()).getClass())
{
//do something
}

しかし、これは毎回新しいオブジェクトをその場でインスタンス化することを必要とし、それを捨てるだけです。 "a"が "MyClass"クラスに属していることを確認するもっと良い方法はありますか?

回答:

回答№1の132

instanceof 他の答えで説明されているように、キーワードは通常あなたが望むものです。 それを念頭に置いて instanceof 戻ります true スーパークラスにも。

オブジェクトがクラスの直接のインスタンスであるかどうかを確認したい場合は、クラスを比較できます。次のようにしてインスタンスのクラスオブジェクトを取得できます。 getClass()。そして、あなたは静的に特定のクラスにアクセスすることができます。 ClassName.class.

したがって、たとえば:

if (a.getClass() == X.class) {
// do something
}

上記の例では、次の場合に条件が真になります。 a のインスタンスです Xしかし、そうではない a のサブクラスのインスタンスです。 X.

比較において:

if (a instanceof X) {
// do something
}

の中に instanceof たとえば、次の場合に条件は真です。 a のインスタンスです X、またはif a のインスタンスです サブクラスX.

ほとんどの時間、 instanceof は正しい。


答え№2の18

これを動的に行う必要がある場合は、次のものを使用できます。

if (clazz.isInstance(a)) {
// do something
}

どこで clazz のインスタンスです Class.


回答№3の16

使用 instanceof オペレーター:

if(a instanceof MyClass)
{
//do something
}

回答№4の4

オペレータを試す instanceof.


答え№5の場合は3

の使用に同意します instanceof すでに述べた。

を使用することの追加の利点 instanceof と一緒に使うと null 参照 instanceof のが戻る false、while a.getClass() 投げるだろう NullPointerException.


答え№6の2

通常の方法は次のとおりです。

if (a instanceof A)

ただし、できない場合があります。 A 総称引数で。

Javaの型が消去されているため、次のものはコンパイルできません。

<A> boolean someMethod(Object a) {
if (a instanceof A)
...
}

そして、次のような成果は得られませんでした。 unchecked cast 警告):

<A> void someMethod(Object a) {
try {
A casted = (A)a;
} catch (ClassCastException e) {
...
}
}

にキャストできません A 実行時に A 本質的に Object.

そのような場合の解決策は、 Class 一般的な引数の代わりに:

void someMethod(Object a, Class<A> aClass) {
if (aClass.isInstance(a)) {
A casted = aClass.cast(a);
...
}
}

その後、メソッドを次のように呼び出すことができます。

someMethod(myInstance, MyClass.class);
someMethod(myInstance, OtherClass.class);