2012-03-30 74 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

由於您使用'TestIF'作爲泛型類型*參數*和具體類(接口)名稱,因此您對泛型的使用有點混淆。你能清理這個歧義嗎? – 2012-03-30 17:04:57

+0

如果用T替換泛型類型TestIF,會怎樣擴展TestIF? – 2012-03-30 17:06:48

+0

@GuillaumePolet是的,我相信應該有所幫助,雖然我需要使用?在構造函數中擴展TestIF。它強制我的測試來實現TestIF,對我來說這應該足夠了。 – Dustin 2012-03-30 20:30:37

回答

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; 
}