2011-01-09 5 views
0

수퍼 클래스 A가 있으며, 많은 서브 클래스 B, C, D가 있습니다. 사람들은 더 많은 서브 클래스를 작성할 수 있습니다. 각각의 클래스는 dostuff() 메소드를 가지며, 각각은 어떤면에서 다르다.오브젝트는 Java에서 오브젝트 클래스를 구성합니다.

A에 속한 객체 또는 그 중 하나의 하위 클래스를 만드는 객체를 원합니다.

예를 들어 서브 클래스의 이름이나 해당 클래스의 객체를 전달할 수 있으며 클래스의 다른 객체를 생성합니다. 물론

나는

A construct(A var){ 
    stuff = var.dostuff(); 
    domorestuff(stuff) 
    return new A(stuff); 
} 

B construct(B var){ 
    stuff = var.dostuff(); 
    domorestuff(stuff) 
    return new B(stuff); 
} 

C construct(C var){ 
    stuff = var.dostuff(); 
    domorestuff(stuff) 
    return new C(stuff); 
} 

을 쓸 수 있지만이 효율적이지 않습니다. 새 서브 클래스를 만들 때마다 몇 줄의 새로운 라인을 작성해야합니다.

제네릭을 사용할 수없는 것 같습니다. A의 하위 클래스에없는 객체에는 dostuff()를 사용할 수 없기 때문에

이 상황에서 어떻게해야합니까?

답변

1

리플렉션을 사용할 수 있습니다.

public static <T extends A> T construct(Class<T> tClass) { 
    T t = tClass.newInstance(); 
    t.doStuff(); 
    moreStuff(); 
    return t; 
} 

예외를 캐스팅하고 캐치해야하지만 기본 아이디어입니다.

+0

t의 생성자를 사용하려면 어떻게해야합니까? –

+0

기본 생성자를 사용합니다. 다른 생성자를 사용하려면 getConstructor()를 사용해야합니다. –

1

공장 패턴을 구현해야합니다. 구현시 Class.forName(className)을 사용합니다.

public A create(String className) throws Exception { 
    return Class.forName(className).newInstance(); 
} 
관련 문제