2012-12-14 2 views
10

저는이 질문에 호기심을 나타내고 있습니다. 어쩌면 의미가 없을 수도 있습니다.클래스 이름이 Java instanceof 인 경우

우리는 같은 자바 instanceof를 사용하고 있습니다 : 우리는 아래와 같이 사용할 수없는 이유

if (a instanceof Parent){ //"Parent" here is a parent class of "a" 
} 

:

if (a instanceof Parent.class){ 
} 

두 번째의 관점에서 더 많은 의미를 'instanceof를'합니까 엄격한 프로그래밍? "Parent"와 "Parent.class"의 차이점은 무엇입니까?

+0

관련 http://stackoverflow.com/questions/496928/what-is-the-difference-between-instanceof-and-class-isassignablefrom –

+0

관련 http://stackoverflow.com/questions/2590640/why-cant -a-class-be-passed-to-instanceof – PeterMmm

+0

주 : 두 번째 접근법의 경우 'Parent.class.isInstance (a)'가 적절한 검사입니다. – Vulcan

답변

15

"부모"와 "부모"의 차이점은 무엇입니까?

후자클래스 리터럴 - Class<Parent> 타입의 오브젝트에 액세스하는 방법.

전자는 다양한 상황에서 사용되는 클래스의 이름 만입니다 - 'instanceof를'두 번째의보기에서 더 의미가 있는가 등

캐스팅 정적 메소드, 생성자를 호출 할 때 엄격한 프로그래밍?

그럼 언어가 정의되지

- 타입의 이름 instanceof 작품, 결코 표현. 당신은
if (a instanceof Parent.class) 

다음 당신이 쓸 수 않는
기대 을 거라고 쓸 수있는 경우 :

Class<?> clazz = Parent.class; 
if (a instanceof clazz) 

을 ... 그리고 그냥 작동하는 방식이 아니다. 반면, 입니다. Class.isInstance 원하는 경우 전화 할 수있는 방법입니다.

"엄격한 프로그래밍 관점"이란 무엇을 의미합니까?

1

Parent은 클래스이므로 두 번째 예에서는 첫 번째 예가 더 이상 이해되지 않습니다. 인스턴스가 클래스의 인스턴스인지 묻는 중입니다. a instanceof Parent은 꽤 직접적인 표현입니다.

Parent.class예를 Class, 그래서 컴파일 두 번째 예는 (가, instanceof의 오른쪽 자체가 인스턴스가 될 수 없습니다), 그것을 확인하지 않을 경우에도 당신이 그것을 원하는 확인하다. :-)

0

Parent은 유형의 이름입니다. Parent.class은 본질적으로 개체 (특히 Class의 인스턴스)를 참조하는 정적 변수입니다. aParent 유형의 인스턴스인지 여부를 묻고 싶습니다. 객체 자체가 다른 유형 (예 : Class)의 인스턴스인지 여부는 아닙니다.

0

Parent.class으로 작성하면 부모 클래스에 java.lang.Class 개체가 생성된다는 의미입니다. 이렇게 if (a instanceof Parent.class){ } 이것은 당신을 위해 작동하지 않을 것이다.

는 클래스 클래스에 대한 자세한 내용은 다음 링크를 살펴 : Class 클래스의
Class

인스턴스는 실행중인 Java 응용 프로그램의 클래스 및 인터페이스를 나타냅니다. 모든 배열은 동일한 요소 유형 및 차원 수를 갖는 모든 배열에서 공유되는 Class 객체로 반영되는 클래스에도 속합니다. 기본 Java 유형 (boolean, byte, char, short, int, long, float 및 double) 및 키워드 void는 Class 객체로도 표현됩니다.

0

정적 인 Parent.class 회원은 실제로 개체입니다. 당신은 유형 Object의 변수에 할당하거나 당신이 원한다면 Class를 입력 할 수 있습니다 반면에

Object o = Parent.class; 
Class c = Parent.class; 

Parent는 객체 나 변수되지 않습니다 : 그것은 자바 사양에 따라하는 Type Name입니다.

Cat myCat = new DomesticLonghair(); 
a instanceof myCat; 

그냥 ... 바보 : Parent.class 이후

당신이 할 수 있다면

...

a instanceof Parent.class 

는 다음 당신은 또한이 작업을 수행 할 수있는 실행 가능하게 수있는 개체입니다.

관련 문제