2011-09-15 4 views
1

나는 이라는 추상적 인 클래스를 가지고 있는데, 하나의 메소드는 public int get(int x, int y)이다.클래스 선언에 사용할 Input 인수를 어떻게 설정할 수 있습니까?

클래스 B, C, D에는 모두 동일한 방법이 있으며 추상 클래스 A까지 확장됩니다. 클래스 Car에서

Car 생성자는 B 중 하나 C, D 클래스에서 사용할 수있는 결정하는 데 사용되어야 문자열 인수 type를받습니다.

분명히 type에 기반한 조건문을 if...else에 사용하고 있습니다.

그래서 코드는 3 개 클래스 중 하나를 사용할 것인지 결정하는 것입니다 것처럼 내가 문자열 인수를 사용할 수있는 우아한 방법이 있나요

if(type.equals("B")){ 
    A = new B(); 
} else if(type.equals("C")){ 
    A = new C(); 
} //and so on.. 

처럼?

+1

왜 이런 식으로 일하고 있습니까? 이것은 수업 과제의 요구 사항입니까? 그렇지 않다면 해결하려고하는 전체적인 문제에 대해 더 자세히 알려주고 코드로 해결하려는 방법에 대한 구체적인 내용은 알려주지 않아야합니다. 아마도이 문제를 해결할 수있는 완전히 다른 방법이있을 것입니다. –

+0

아니요, 아무런 요구 사항이 없습니다. 나는 그 일을 할 수있는 방법이 있는지 궁금합니다. 다양한 클래스를 작성한 후에는 단일 메소드에서 많은 조건문을보고 싶지 않습니다. – user482594

+0

이 디자인은 같은 일을하는보다 우아한 방법을 찾더라도 어지러운 냄새가납니다. 나는 당신이하려고하는 것을 추구하지 않고, 전반적인 디자인 문제를 해결하는 것이 더 낫다고 생각한다. 도움이 여전히 필요하다면 해결하려는 문제가 아니라 해결하려는 문제에 대한 자세한 정보가 필요합니다. 그래서 질문은 "나는 어떻게 더 좋은 kludge를 만들 수 있는가?"가 아니라 "어떻게이 kludge를 완전히 피할 수 있는가"가되어야한다. –

답변

2

당신은 생성자에 인수 대신 문자열을 사용하는 등 인터페이스/추상 클래스를 사용할 수 있습니다 사용하여 인스턴스화합니다.

public Car(A a) { this.a = a; } 

그리고 다른 곳은 :

B b = new B(); 
new Car(b); 

dependency injection라고합니다.

+0

의존성 주입 - 지금 제가 말하고자하는 바입니다. 문제를 해결하는 대답이지 질문이 아닙니다. 1 + –

+0

@Hovercraft 당신은 내가 후자를하는 버릇이 있다는 것을 암시하고 있습니까? (진실은 아마 내가하고있는 것입니다, 나는 반 시간에 응답하는 동안 배우고 있습니다.) : b –

+0

네, 그리고 진심으로 그렇게하겠습니다. –

1

당신은 Class 개체를 가져 Class.forName(String)를 사용하여 다음 newInstance()

관련 문제