2012-03-30 1 views
4

나는 비 코드 작성자가 최소한의 코드 변경으로 새로운 "테스트"와 "테스트"유형을 매핑하고 의존성 주입에 Guice를 사용하는 쉬운 방법을 원했습니다. 나는 단순함을 좋아하지만 타입 안전성이 부족하지는 않다. 이 문제를 개선하기위한 제안이 있으십니까? 의존성 주입을위한 안전한 열거 형

public enum TestType { 

    TEST_TYPE_1("TEST-1", Test1.class), 
    TEST_TYPE_2("TEST-2", Test2.class), 
    TEST_TYPE_3("TEST-3", Test3.class), 
    TEST_TYPE_4("TEST-4", Test4.class), 
    TEST_TYPE_5("TEST-5", Test5.class); 

    private final String testType; 
    private final Class<TestIF> tester; 

    private <TestIF> TestType(String testType, Class<TestIF> tester) {  
     this.testType = testType; 
     this.tester = (Class<tester.TestIF>) tester; 
    } 

    public String toString() { 
     return this.testType; 
    } 

    public Class<TestIF> tester() { 
     return this.tester; 
    } 
} 

"테스트"

는 다음과 같이 인스턴스화 것 :

TestIF tester = Guice.createInjector().getInstance(testType.tester());  
tester.execute(); 
+0

generic 타입 매개 변수와 구체적인 클래스 (인터페이스) 이름으로 'TestIF'를 사용하면 generics를 약간 혼란스럽게 여기는 경우가 있습니다. 그 모호성을 정리할 수 있습니까? –

+0

일반 형식의 TestIF를 T extends TestIF로 바꾸면 어떻게됩니까? –

+0

@GuillaumePolet 예, 도움이 필요하다고 생각합니다. 사용할 필요가 있습니까? 생성자에서 TestIF를 확장합니다. 필자의 테스트에서는 필자의 경우 TestIF를 구현해야한다. – Dustin

답변

0

이이 경우에 조금 더 안전하다 TestIF을 구현하기 위해 테스트를 강제하는 데 도움이됩니다.

public enum TestType { 

TEST_TYPE_1("TEST-1", Test1.class), 
TEST_TYPE_2("TEST-2", Test2.class), 
TEST_TYPE_3("TEST-3", Test3.class), 
TEST_TYPE_4("TEST-4", Test4.class), 
TEST_TYPE_5("TEST-5", Test5.class); 

private final String testType; 
private final Class<? extends TestIF> tester; 

private <T extends TestIF> TestType(String testType, Class<? extends TestIF> tester) {  
    this.testType = testType; 
    this.tester = (Class<tester.TestIF>) tester; 
} 

public String toString() { 
    return this.testType; 
} 

public Class<? extends TestIF> tester() { 
    return this.tester; 
}