2012-07-11 5 views
0

정확하게 의심을 정의하는 방법을 알지 못해서 질문이 이미 제기 된 경우 조금만 기다려주세요.자바 : 수퍼 클래스를 알고있을 때 캐스팅에 대한 반성

개체를 동적으로 인스턴스화해야한다고 가정 해 보겠습니다. 이 객체는 확실히 알려진 불변 클래스의 서브 클래스의 인스턴스가 될 것입니다. A. 특정 구현 클래스를 동적으로 얻을 수 있습니다.

내가 대상 클래스에 대해 아무것도 몰랐 정확히 것처럼 반사를 사용하는 것이 좋을 것이다, 또는 같은 것을 할 수 /보다 더 낫다 것 :

A obj = (Class.forName("com.package.Sub-A")) new A(); 

Sub-A extends A를? 목적은

+0

이 코드는 컴파일되지 않습니다. 그것은 심지어 말이되지 않습니다. 'new A()'의 결과는 A의 클래스가 아닌 A 나 그 서브 클래스의 클래스입니다. 질문을 수정하십시오. – EJP

답변

1

보통이

Class.forName("com.package.Sub-A").getConstructor(param types).newInstance(param values) 

을 통해 이루어집니다 ... 반사 오버 헤드 시간을 피해하는 것입니다, 당신은 단지 캐시 생성자 객체 반사 overherad을 피하기 위해.

+0

감사합니다. "캐시 생성자 객체"는 무엇을 의미합니까? – Ema

+0

getConstructor (...)는 (Surprise !!!!) java.lang.reflect.Constructor 유형의 객체를 제공하며이 객체를 사용하여이 클래스의 여러 스태 이스를 생성 할 수 있습니다. –

+0

감사합니다. – Ema

관련 문제