2012-09-15 3 views
0

저는 5 단계 레벨의 자바 빈 상속 계층을 가지고 있으며 다양한 유형의 차량 모델을 가장 깊은 수준의 하위 클래스로 사용합니다. 각 차량에는 약 20 개의 필드가 있습니다. 나는 공장이 가치에 기반한 특정 차량 모델을 반환하도록하고있다. 그런 다음 세터를 사용하여 20 개 필드 각각을 설정해야합니다. 그러나 특성, 따라서 세터는 각 모델에 의존합니다. 이 모델은 인터페이스를 구현하지 않습니다. 비록 그들이했다면, 나는 빈 콘크리트 타입을받는 인터페이스 타입의 setter를 호출 할 수 없을 것입니다. 구체적인 모델 타입으로 참조를 받아서 setter를 호출 할 수있는 방법이 있습니까? 클래스의 나머지 부분은 다른 메소드를 호출 할 때 이러한 참조를 사용해야합니다.많은 구체적인 유형 중 하나로 콩을받습니다.

나는 다음 중 하나를받을 싶습니다

Camry camry = Factory.get("DL"); 
Taurus taurus = Factory.get("BC"); 
Cadillac cadillac = Factory.get("ES"); 

그리고 적절하게 참조 중 하나를 사용하십시오. cadillac.setStarSystem ("star123"); .. 모든 캐딜락 관련 설정자

공장을 이용할 필요는 없습니다. 다른 방법으로도 가능합니다.

감사합니다.

답변

0

당신이 어떤 유형을 되찾았는지 알게된다면, 이것은 단순한 주조 운동이 아닙니까? (? "다른 기술 할 것")

Camry camry = (Camry)vehicles.get("DL"); 
Taurus taurus = (Taurus)vehicles.get("BC"); 
Cadillac cadillac = (Cadillac)vehicles.get("ES"); 

cadillac.setStarSystem("star123"); 

그리고 아니, 당신은이 작업을 수행 할 특정 인터페이스를 사용하는 필요하지 않습니다. 표시된/언급했듯이, 이것은 "세터를 호출 할 수 있도록 구체적인 모델 유형으로 참조를받을 수 있습니다."

(자바 1.5/5.0에 도입 된 제네릭 중 하나 불행한 부작용이 가끔 다형성의 기초 잊어 사용자가 원인이다 -. 그리고 갑자기, 모든 "캐스팅이 나쁘다")

관련 문제