2012-01-17 5 views
6

可能性の重複:私は、このようなJavaのjava.lang.Classオブジェクトと==を比較できますか?

Class<? extends MyObject> aClass = ...; 

としてクラスを持っている場合は
Does Java guarantee that Object.getClass() == Object.getClass()?

は、私はその後行うことができます。

if (aClass == MySubObject.class) { ... } 

または私はまた

if (aClass.equals(MySubObject.class)) { ... } 

を行う必要がありますが、さらにその答えを知るには、私はこれが定義された基準、すなわちを知るのが大好きです。

可能であれば、==を使用することをお勧めします。私はそれをより読みやすく、より速く見つけることができます。あなたは==を使用することができます

+1

http://stackoverflow.com/questions/3738919/does-java-guarantee-that-object-getclass-object-getclass –

+0

もう1つhttp://stackoverflow.com/questions/928531/does-java-haveクラステストの方法と同じです –

+0

http://stackoverflow.com/questions/5997801/java-comparing-classes-with-or-equals-is-there-a-difference –

答えて

7

(もちろんそれははるかより読みやすい、または高速それほど、それでも、簡単なソリューションが利用可能な場合は、なぜ、より複雑なソリューションを使用しています。ということではありません)が、それは正確だから、あなたは何を得るん何がClass.equals()します。

クラスはequalsメソッドを定義していないため、Objectから継承します。あなたはこれを見るためにソースを読むことができます。

可能であれば、私はequalsを使用します。それについて考える必要はありません。私がコードを読んでいるとき(私のコードを含む)、私はまだこのクラスのためにと同じであるかどうか自分自身に尋ねる必要はありません。==です。

+5

はい、あなたは何かを得る: '=='はnull安全です。 – yankee

+5

@yankee true、その場合はあなたが書くことができます。 'MySubObject.class.equals(aClass)' –

5

あなたは==でクラスを比較することができ、それはClassの場合のequalsと同じものですが、あなたの例を使用すると、1つのクラスが別で、「ある-」の関係を持っているかどうかを知りたいことを示唆しています。 2つのクラスは、同じクラスであれば等しいだけで、明らかにVehicle.class != Car.classです。

あなたはCarがあるかどうか、Vehicleを知りたい場合は、Class#isAssignableFromを使用しています。

関連する問題