2012-01-17 2 views
6

가능한 중복 :
Does Java guarantee that Object.getClass() == Object.getClass()?Java에서 ==를 사용하여 java.lang.Class 객체를 비교할 수 있습니까?

I 클래스가있는 경우

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

은 그때 할 수있는 등 :

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

또는 내가 더 대답을 알고, 나는이 정의 된 기준 즉, 알고 싶어요, 또한

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

을 어떻게해야합니까.

가능한 경우 더 읽기 쉽고 빠르기 때문에 ==을 사용하는 것을 선호합니다. (물론 그건하지 훨씬 간단한 해결책을 사용할 수있는 경우 훨씬 빠르게,하지만 여전히 왜 더 복잡한 솔루션을 사용하는 것이 더 읽기, 또는 .)

+1

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

+0

다른 하나 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을 사용합니다. 그런 다음 생각할 필요가 없습니다. 내가 코드를 읽을 때 (내 코드 포함) 나는 여전히 자신에게 ==equals과 같거나 같지 않다고 묻지 않아도됩니다.

+5

예, 당신은 무언가를 얻으십시오 :'=='은 null 안전합니다. – yankee

+5

@yankee 사실, 당신이 쓸 수 있습니다. 'MySubObject.class.equals (aClass)' –

5

당신은 ==와 클래스를 비교할 수 있습니다, 그것은 Class의 경우에 대한 equals과 같은 일이지만, 당신의 예제는 하나 개의 클래스가 서로 "있는-A"관계가 있는지 여부를 알고 싶은 것이 좋습니다. 두 클래스는 같은 클래스 인 경우에만 같고, 분명히 Vehicle.class != Car.class입니다. 당신이 Car가-A 여부를 Vehicle 알고 싶다면

, Class#isAssignableFrom를 사용합니다.

관련 문제